Базовый тип класса enum, связанный с целочисленным типом (ошибка компиляции)

Я компилирую это с 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

Решение

В соответствии с [Dcl.enum] р2:

Тип Спецификатор-сл из перечисление базы назовите целочисленный тип; любая квалификация cv игнорируется.

Здесь Тип Спецификатор-сл относится к части после :,

А что такое целочисленные типы ([Basic.types] P7):

Типы bool, char, char16_t, char32_t, wchar_t, а также целочисленные типы со знаком и без знака вместе называются целочисленными типами.47 Синоним для целочисленного типа — целочисленный тип.

Таким образом, число с плавающей запятой не является частью целочисленных типов и поэтому недопустимо использовать в перечислении в качестве базы.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]