Наличие директивы препроцессора как части заявления - PullRequest
0 голосов
/ 17 июня 2019

Мы переехали в новую среду компиляции, и внезапно я начал видеть эту ошибку "ожидаемое выражение" в этом утверждении:

enum {
  PROJX,
  PROJY,
  PROJW
};

constexpr int PLATFORM =
#if defined(X)
  PROJX
#elif defined(Y)
  PROJY 
#elif defined(W)
  PROJW
#endif
  ;

Ошибка указывает на последнюю точку с запятой.

Это связано с определенным стандартом c ++ 11/14/17?

1 Ответ

7 голосов
/ 17 июня 2019

Стандарт не меняет это поведение.Я предполагаю, что ни один из трех не определен, и в итоге вы получите:

constexpr int PLATFORM = ;

Вы можете проверить это, добавив #else и значение по умолчанию / #error или проверив вывод вашегокомпилятор после запуска препроцессора.

...