Совместимо ли расположение типов перечисления с их базовым типом?

Я просматриваю n3690черновик предстоящего C++14 стандарт, и я вижу в разделе 7.2 параграф 9:

Два типа перечисления совместимы с макетом, если они имеют один и тот же базовый тип.

Однако я не могу найти ничего, что говорит, что тип перечисления совместим с его базовым типом. Мне кажется очевидным, что это должно следовать с учетом разумной семантики того, что означает "базовый тип", но действительно ли это гарантировано стандартом?

1 ответ

Решение

НЕТ, в Стандарте нет черной буквы, которая бы указывала на это. Самое близкое, что можно получить - это пункт 7 этого же абзаца.

7 [...] базовый тип является целочисленным типом, который может представлять все значения перечислителя, определенные в перечислении. Если ни один целочисленный тип не может представлять все значения перечислителя, перечисление некорректно сформировано. [...]

Кроме того, 4.5 Интегральные рекламные акции [conv.prom] говорит

4 Значение типа перечисления с незаданной областью, базовый тип которого фиксирован (7.2), может быть преобразовано в значение его базового типа.

Как указано в комментариях, могут быть (хитрые IMO) реализации, которые имеют различную последовательность между enum и его базовым типом. Это будет проблема качества реализации. Для всех практических целей, совместимость макета следует ожидать.

Другие вопросы по тегам