
According to the MPL reference, a placeholder expression X<a1,..,an> must satisfy (among others) the following condition: "All of X's template parameters, including the default ones, are types." According to that the following should then compile without errors: #include <boost/mpl/apply.hpp> #include <boost/mpl/assert.hpp> #include <boost/type_traits/is_same.hpp> using namespace boost; using namespace boost::mpl; template<typename T,int=0> struct foo { template<typename Q> struct apply{ typedef Q type; }; }; typedef apply1<foo<_1>,int>::type t1; BOOST_MPL_ASSERT((is_same<t1,int>)); int main(){} However, I've tried with GCC 3.4.4 and the static assertion fails! I'd like to know: 1. Whether I'm right in assuming that the code above should compile without assertion failures. 2. What the behavior is for other versions of GCC and compilers: reports most welcome!! 3. Whether this is a known problem specific to GCC or, more generally, what the status of this issue is. Thank you, Joaquín M López Muñoz Telefónica, Investigación y Desarrollo