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");