http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54468
Bug #: 54468 Summary: type trait is_unsigned<...>::value for C++11 enum class with underlying unsigned type not true Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: mh...@bluezoosoftware.com The is_unsigned<> type trait is not detecting the underlying signedness of a C++11 enum class or enum. The output of: #include <iostream> #include <type_traits> using namespace std; int main() { enum class enum_class_type: unsigned char { ENUM_CLASS_VALUE0, ENUM_CLASS_VALUE1 }; cout << boolalpha << "is_enum<enum_class_type>::value = " << is_enum<enum_class_type>::value << endl; cout << "is_unsigned<enum_class_type>::value = " << is_unsigned<enum_class_type>::value << endl; enum enum_type: unsigned char { ENUM_VALUE0, ENUM_VALUE1 }; cout << boolalpha << "is_enum<enum_type>::value = " << is_enum<enum_type>::value << endl; cout << "is_unsigned<enum_type>::value = " << is_unsigned<enum_type>::value << endl; } should be: is_enum<enum_class_type>::value = true is_unsigned<enum_class_type>::value = true is_enum<enum_type>::value = true is_unsigned<enum_type>::value = true but is: is_enum<enum_class_type>::value = true is_unsigned<enum_class_type>::value = false is_enum<enum_type>::value = true is_unsigned<enum_type>::value = false