
On 7/10/2010 12:49 PM, Frédéric Bron wrote: [...]
What I can say is that there is some differences between the traits I proposed and the one of the CTL: in CTL, there is no check of return type. We had quite a long dicussion about this and ended to a nice solution which is to check or not (optional) for the return type to be convertible to a given type.
I've found all 3 of the following options to be useful in my own (C++03) implementation of operator traits: (i) ignore the return type of the operator entirely (ii) check that the return type of the operator is convertible to a given type (iii) check that the return type of the operator satisfies a given MPL metafunction class or MPL lambda expression As a result, the trait's signature looks something like template< class T, class Result = void, class ResultCond = mpl::always< true_type >
struct my_trait; The trait evaluates to true if the result type of the operator - is convertible to Result or Result is void; and - satisfies ResultCond. Of course, option (iii) is a generalization of (ii), but (ii) (along with (i)) would be the common case (and hence providing an interface specifically for (ii) would be more client-friendly). A use case for (iii) might be to check that the return type is *precisely* the given type, or if the return type is one of many compatible-but-not-necessarily-interconvertible types.
If we agree to add only the operator traits to the type_traits library separatly from the CTL, I think that my proposal is nearly ready and I can do the extra work. If we want to add the CTL, it is better if someone else does it as it would be too much work for me.
Is your proposal available for inspection at the moment? I don't recall recently running across a link that you've provided. Sorry if I missed it :/ - Jeff