On Sunday 15 June 2014 12:07:44 Vicente J. Botet Escriba wrote:
Le 13/06/14 20:27, Peter Dimov a écrit :
The only requirement for a type trait (or a metaprogramming predicate, in general) should be to have a ::value with a value of 0 or 1. Nothing more. No ::tags. No required base classes. No mandatory dependencies of any kind.
What should be and what it is a quite different concern. The current documentation says that a boolean type traits inherits from boost::true_type or boost::false_type.
If you read some earlier posts, you will find discussion about TypeTraits.Core submodule. I think no one in good consciousness considers to break TypeTraits backward compatibility in such a radical way.
If you want to dispatch, type traits with a ::value == 0 should be _convertible_ to false_type, and type traits with a ::value == 1 should be convertible to true_type, but they should not be required to derive from them. This convertibility can be achieved from the true_type/false_type side.
I don't see how.