Boost logo

Boost :

Subject: Re: [boost] [mpl] Using apply with gcc error
From: Edward Diener (eldiener_at_[hidden])
Date: 2011-02-04 17:25:44


On 2/4/2011 5:11 PM, Edward Diener wrote:
> On 2/4/2011 12:02 PM, Dave Abrahams wrote:
>> 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?
>
> The last suggestion works well, as does the first.
>
> But I have some confusion about boost::mpl::apply which neither your MPL
> book nor the Boost docs clears up for me. As I understand it 'apply'
> invokes the 'apply' metafunction in a metafunction class and
> apply<...>::type returns the invoked metafunction's type. If I am
> deriving from the metafunction's type, then 'myMF' itself does not have
> a 'type' but only a 'value'. Is this correct or do I have a basic
> misunderstanding of how boost::mpl::apply works ?

Never mind. The fog in my brain has cleared and I see what is happening.
Thanks for your help !


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