[MPL] Help with delayed placeholder expression evaluation

Hello ! I have been trying to work with the MPL but I have some problems with the composition and argument binding concepts. 1/ Here is a problem I cannot find a solution for: I would like to have a placeholder expression (S) which takes a single argument which is itself a placeholder expression of 2 arguments (A). I want S when invoked with mpl::apply to return a lambda expression (B) of 1 argument which when invoked on (x) would yield the same result than applying the pair (x, x) to (A). This means I expect apply<S, A> == B and apply<B, x> == apply<A, x, x>. Could someone tell me if this is possible? (I know how to do this without a placeholder expression for (S) but I would like to improve my understanding of them) Typedef int_<1> one; Typedef plus<_1, _2> A; Typedef . S; Typedef typename apply<S, A>::type B; BOOST_STATIC_ASSERT(apply<B, one>::type::value == apply<A, one, one>::type::value) 2/ Why doesn't bind take a placeholder expression ? If I want to remap a placeholder expression, I can do for example: bind<typename lambda<plus<_1, _2>::type, _1, _1> but why doesn't the library invoke lambda by itself ? (bind< plus<_1, _2>, _1, _1> wont work) Is the combination bind/lambda the only way to remap placeholder expressions? 3/ What is the use of protect? Where can I find some examples? Thanks in advance, Charles
participants (1)
-
Thyfate