This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [v3] ext/type_traits.h
Benjamin Kosnik wrote:
I want to say that whereas, per your citation, I also called the trait
to_* when I "invented" ;) it, the new naming scheme may have advantages:
we are directing attention to the syntactic notion of adding the
""unsigned qualification"" or removing it, not to the actual signedness
of the types at issue in input and output (I hope I'm sufficiently
clear).
I think so.
Ok...
FYI this is the reason I think __add_unsigned is better than __add_signed.
... but isn't __add_signed necessary anyway, from out point of view?
Imean, we would have,
template<typename _Value>
struct __add_signed
{ typedef _Value __type; };
template<>
struct __add_signed<char>
{ typedef signed char __type; };
...
template<typename _Value>
struct __remove_signed
{ typedef _Value __type; };
template<>
struct __remove_signed<signed char>
{ typedef char __type; };
...
Indeed, for short, int, and so on, the ""signed qualifier"" is implicit
(I thnink that was your point), from a semantic point of view, but
syntactically, our route in fact, only adding both appear to lead to a
consistent and complete set. About the latter, I was thinking yesterday,
that, if I'm not mistaken, we could also have:
template<typename _Value>
struct __to_signed
{
typedef typename
__add_signed<typename
__remove_unsigned<_Value>::__type>::__type __type;
};
template<typename _Value>
struct __to_unsigned
{
typedef typename
__add_unsigned<typename
__remove_signed<_Value>::__type>::__type __type;
};
Paolo.