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

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

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

int main()
{
return FOO;
}

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

3

Решение

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

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

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

условно-выражение это выражение основной константы […]

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

6

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

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