Будет ли `typedef enum {} t` разрешать идентификаторы элементов enum в C ++ 0x? - PullRequest
6 голосов
/ 10 февраля 2010

Я считаю, что новый стандарт C ++ допускает дополнительную «область видимости» для перечисляемых типов:

enum E { e1, e2 };

E var = E::e1;

Так как я знаю много исходных файлов, содержащих старый ende typedef типа C, я подумал, позволит ли новый стандарт использовать typedef для этих иначе анонимных перечислимых типов:

typedef enum { d1, d2 } D;
D var = D::d1; // error?

1 Ответ

5 голосов
/ 10 февраля 2010

Новый стандарт добавит новый тип сильного перечисления, но синтаксис будет немного отличаться, и перечисления старого стиля будут совместимы (допустимый код в C ++ 03 будет действительным кодом C ++ 0x), поэтому не нужно ничего делать, чтобы сохранить действующий код действительным (не typedef и не все остальное).

enum class E { e1, e2 }; // new syntax, use E::e1
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)

Здесь есть C ++ FAQ здесь , который решает эту конкретную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...