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

Reply via email to