
On 11/16/2010 03:49 PM, Frédéric Bron wrote:
I would like to propose to your review the following addition to the type_traits library, available at the following addresses: https://svn.boost.org/trac/boost/browser/sandbox/type_traits http://dl.free.fr/lRm4VL6WP/type_traits.tar.bz2
The purpose of the addition is to add type traits to detect if unary and binary operators can be applied to given types. For example, is "x<y" or "!x" or "x+y" meaningful? If required, the return type of such an expression is checked to know if it is convertible to a given type. Default behaviour is to not check the return type. [...]
I think several people who follow this list (myself included) have implementations of such traits lying around, so it makes sense to union the best parts of each one. I will take a look at your implementation and see if I have any suggestions. One thing that I've either found useful is to have an additional template parameter in addition to the parameter types and the return type, which is a Boost.MPL metapredicate intended to be applied to the actual result of the operation. The trait then evaluates to true only if the actual result type satisfies the given Boost.MPL metapredicate. This covers the cases where you may want to know more about the result type than whether it is convertible to some given type. For example, for the comparison operators, you may want to check if the result type of a particular comparison is *precisely* bool, rather than just convertible bool (that might be a rather contrived example, and if you don't believe this has a real use, I can (probably) come up with more real-world examples). It should be easy to support, it won't complicate existing use, and I believe it does provide some additional desirable flexibility. - Jeff