Peter Dimov wrote: > I wrote "I don't understand how it works even _after_ (briefly) > looking at the code. ;-)" but then it occured to me that list(int, char, > long, int) is a function type.
Yep. > Cool trick. Cv qualifiers will probably be a problem They are stripped on non-class rvalues, aren't they? :(. So, basically, this one will work: typedef eval< count_if( list(int,char,long,her const) , lambda(is_same(_,her const)) ) >::type res; BOOST_STATIC_ASSERT(res::value == 1); but this one won't: typedef eval< count_if( list(int,char,long,int const) , lambda(is_same(_,int const)) ) >::type res; BOOST_STATIC_ASSERT(res::value == 1); // error, res::value == 2 It's an issue to solve indeed - thanks for reminding the rule. > but it's cool. Aleksey wins the Boost obfuscated C++ contest of the week. I am not completely sure if it's a compliment, but thanks :). Aleksey P.S. It just occured to me that with the above we finally have a way to write two nested template instantiations without a space between their closing brackets: typedef one<another<int> > == typedef eval< one(another(int)) >::type That one would really make a good obfuscated contest's task :). _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost