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

Reply via email to