
Le 07/04/12 09:13, Robert Ramey a écrit :
Documentation for mpl::less<T> has the following section:
Expression semantics For any Integral Constants c1 and c2: typedef less<c1,c2>::type r;
Return type:Integral Constant. Semantics:Equivalent to typedef bool_< (c1::value< c2::value)> r;
typedef less<c1,c2> r; // a
Return type:Integral Constant. Semantics:Equivalent to struct r : less<c1,c2>::type {}; //b
if //a is used then the following yields bool_<true>
is_same< less<c1, c2>, r>
if // b is used then the following yields bool_<false>
is_same< less<c1, c2>, r>
So in what sense are //a and // b equivalent?
Hi, they are not equivalents. The equivalence relation appears via the ::type access. is_same< less<c1, c2>::type, r::type> should be true_type in both cases. This is because integral_constant<typename T, T V> defines a nested typedef 'type' as itself. HTH, Vicente