
AMDG Matt Brown wrote:
I just tried to build this code in visual studio 2005, and got error:
error C3201: the template parameter list for class template 'boost::mpl::bind2<F,T1,T2>::apply' does not match the template parameter list for template parameter 'boolfunc'
This code works fine with gcc, and boost mpl portability page (http://www.boost.org/libs/mpl/doc/tutorial/portability.html) says my version of visual studio should be able to compile this. However, it appears to think the lambda< ... >::type::apply is not a metafunction. Any help will be greatly appreciated.
-Matt Brown
#include <iostream> #include <boost/mpl/lambda.hpp> #include <boost/type_traits/is_same.hpp> #include <boost/mpl/placeholders.hpp>
template <template <typename> class boolfunc> class test { public: static void print() { if(boolfunc<int>::type::value) { std::cout << "int: true\n"; } } };
int main(void) { test< boost::mpl::lambda< boost::is_same<boost::mpl::_1, int> >::type::apply >::print(); };
Don't do that. boost::mpl::lambda< boost::is_same<boost::mpl::_1, int> >::type::apply<int>::type will work, but apply actually takes extra default arguments and thus cannot be bound to a template template argument. i.e. (For exposition only) template<class T> struct lambda { struct type { template<class T0 = na, class T1 = na, ...> struct apply { typedef /unspecified/ type; }; }; }; In Christ, Steven Watanabe