a) 'the unsigned/signed specifiers are not applicable to user-defined types'
The purpose of these two is still not changed, which is to denote a build-in integer types, then we can just leave this alone, and this kind of proposal is not to target to change it.
b) Actually the make_signed and make unsigned are not valid for *all* integer types. It internally uses a kind of enumerating method, which means that you can't make sure that the same header can work for all compilers:
The file here is snipped from msvc:
// TEMPLATE CLASS make_signed
template<class _Ty>
struct make_signed
{ // signed partner to _Ty
static const size_t _Bytes = sizeof (_Ty);
typedef typename _If<is_signed<_Ty>::value, _Ty,
typename _If<_Bytes <= sizeof (char), signed char,
typename _If<_Bytes <= sizeof (short), short,
typename _If<_Bytes <= sizeof (int), int,
typename _If<_Bytes <= sizeof (long), long,
_Longlong>::_Type>::_Type>::_Type>
::_Type>::_Type type;
};
// TEMPLATE CLASS make_unsigned
template<class _Ty>
struct make_unsigned
{ // unsigned partner to _Ty
static const size_t _Bytes = sizeof (_Ty);
typedef typename _If<is_unsigned<_Ty>::value, _Ty,
typename _If<_Bytes <= sizeof (char), unsigned char,
typename _If<_Bytes <= sizeof (short), unsigned short,
typename _If<_Bytes <= sizeof (int), unsigned int,
typename _If<_Bytes <= sizeof (long), unsigned long,
_ULonglong>::_Type>::_Type>::_Type>
::_Type>::_Type type;
};
Assuming if a kind of integer type like __int128 has been implimented into the compiler as the extended integer types from some day, The make_xsigned templates have to be adjusted too to cover that extension. So that solution is not once-for-all's.
c) Roughly i think that there are several compilers care about the sign bit of the pointers internally and others don't, on the contrary. However it shouldn't have been relied on in well formed C++ sources, so i said 'no effect'.
The two have been ruled forbidden to denote the UDTs currently, so we can just keep on what the rule is for UDTs. If it's necessary, we can forbid signed/unsigned for pointers either.
MY NETWORK IS A CRAP!!!