将预处理器指令作为语句的一部分

时间:2019-06-17 17:21:13

标签: c++ c++11 c-preprocessor constexpr

我们转到了新的编译环境,突然间我开始在此语句上看到此错误“期望的表达式”:

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 个答案:

答案 0 :(得分:7)

没有标准可更改此行为。我的猜测是三个都没有定义,最后得到:

constexpr int PLATFORM = ;

您可以通过添加#else和默认值/ #error或在运行预处理程序后检查编译器的输出来进行测试。