
On 2/3/2011 6:02 PM, Steven Watanabe wrote:
AMDG
On 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.).
You are correct.
Add using typename boost::mpl::apply<MF,T>::type;
This should work but gcc does not like it and gives: error: 'type' is not a class or namespace. Simply forgetting about metafunction forwarding and using the tried and true: typedef typename boost::mpl::apply<MF,T>::type type; BOOST_STATIC_CONSTANT(bool,value=type::value); works everywhere.