
On Thu, Feb 3, 2011 at 6:02 PM, Steven Watanabe <watanabesj@gmail.com> 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