Boost logo

Boost :

Subject: Re: [boost] [mpl] Using apply with gcc error
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-02-04 12:02:08


On Thu, Feb 3, 2011 at 6:02 PM, Steven Watanabe <watanabesj_at_[hidden]> wrote:
> n 2/3/2011 2:42 PM, Edward Diener wrote:
>>
>> Compiling this code with gcc:
>>
>> #include <boost/config.hpp>
>> #include <boost/mpl/apply.hpp>
>>
>> template
>> <
>> class MF,
>> class T
>>  >
>> struct myMF :
>> boost::mpl::apply<MF,T>
>> {
>> BOOST_STATIC_CONSTANT(bool,value=type::value);
>> };
>>
>> int main()
>> {
>> return 0;
>> }
>>
>> Gives:
>>
>> "gcc.compile.c++
>>
>> ..\..\..\bin.v2\libs\tti\test\TestMFHasTypeMFC.test\gcc-mingw-4.5.2\debug\TestMFHasTypeMFC.o
>>
>> TestMFHasTypeMFC.cpp:18:5: error: 'type' has not been declared
>>
>
> gcc is correct.  Members of a dependent base class are
> not visible in the derived class.  (This is necessary
> to allow the template to be parsed before the template
> arguments are known.).
>
> Add
> using typename boost::mpl::apply<MF,T>::type;

This is easier, neh?

struct myMF :
boost::mpl::apply<MF,T>
{
    BOOST_STATIC_CONSTANT(bool,value=myMF::type::value);
};

On the other hand, if this thing is returning an MPL integral
constant, why wouldn't you simply:

struct myMF :
boost::mpl::apply<MF,T>::type
{};

and be done with it?

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk