Enum class'底层类型别名为整数类型(编译错误)

时间:2018-01-25 16:30:42

标签: c++ gcc types enums underlyingtype

我用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视为一种整体类型。

1 个答案:

答案 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 整数类型的同义词是整数类型。

因此浮点数不是整数类型的一部分,因此无法在枚举中作为基数使用。