我用GCC 7.2.0编译:
typedef float Signal_t;
enum class Signal_level : Signal_t {
low = -1.0, neutral = 0.0, high = 1.0
};
编译器响应是:
error: underlying type ‘Signal_t {aka float}’ of ‘Signal_level’ must be an integral type
此行为是由标准(-std=c++17
)决定还是特定于GCC?
我希望GCC将Signal_t
视为一种整体类型。
答案 0 :(得分:3)
根据[dcl.enum]p2:
enum-base 的 type-specifier-seq 应命名为整数类型;任何cv资格都会被忽略。
此处 type-specifier-seq 指的是c
之后的部分。
什么是整数类型([basic.types]p7):
类型bool,char,char16_t,char32_t,wchar_t以及有符号和无符号整数类型统称为整数类型。 47 整数类型的同义词是整数类型。
因此浮点数不是整数类型的一部分,因此无法在枚举中作为基数使用。