Условный оператор в выражении константы

Я попробовал следующий фрагмент кода с MSVC 10, где он работает нормально.

enum
{
  FOO = (sizeof(void*) == 8 ? 10 : 20)
};

int main()
{
  return FOO;
}

Что я хотел бы знать, так это: позволяет ли стандарт C++ (предпочтительно C++98) использовать условный оператор в константном выражении, когда все операнды являются константными выражениями, или это причуды / расширения Microsoft?

1 ответ

Решение

Это совершенно обоснованный и разумный стандарт C++.

Тернарный условный оператор формирует выражение, а выражение является константным выражением, если его операндами являются.

Стандартная ссылка C++11 5.19/2:

Условное выражение является основным константным выражением [...]

Обратите внимание, что согласно 5.16 тернарные условные выражения являются одним типом условных выражений. Другие типы такие вещи, как 2 == 3,

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