http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59027

--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Marc Mutz from comment #0)
> 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:

Your own code shows this statement to be false. is_signed is false for your
enumeration type, as required. is_unsigned is also false, as required.

The text in your assertion is wrong:
static_assert(!std::is_signed<MouseButton>::value, "Enum should be unsigned");

It is not true that enums should be unsigned, the traits say enums are neither
signed nor unsigned, and that's what GCC does, as required:

#include <type_traits>
enum MouseButton { };
static_assert(!std::is_signed<MouseButton>::value,
              "Enum should be not be signed");
static_assert(!std::is_unsigned<MouseButton>::value,
              "Enum should not be unsigned");

Reply via email to