http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59027
Bug ID: 59027 Summary: std::is_signed does not include check for is_arithmetic Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: marc.mutz at kdab dot com According to N3797 Table 49, both is_signed and is_unsigned should evaluate to true_type only if the argument is_arithmetic, too. is_unsigned honours this, but is_signed doesn't: template<typename _Tp, bool = is_arithmetic<_Tp>::value> struct __is_signed_helper : public false_type { }; template<typename _Tp> struct __is_signed_helper<_Tp, true> : public integral_constant<bool, _Tp(-1) < _Tp(0)> { }; /// is_signed template<typename _Tp> struct is_signed : public __is_signed_helper<_Tp>::type { }; /// is_unsigned template<typename _Tp> struct is_unsigned : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type { };