请考虑以下代码,这会导致在true预处理器条件中计算布尔文字:
#define SOME_MACRO true
int main ()
{
#if SOME_MACRO
return 1;
#else
return 0;
#endif
}
Run Code Online (Sandbox Code Playgroud)
Clang 3.4和GCC 4.8都接受这个代码,即使是-pedantic -std=c++11 -Wall -Wextra.
Visual Studio 2013拒绝它,致命错误C1017:无效的整数常量表达式.
我对n3376§16.1的解读是,应该应用用于评估常量表达式的常规C++规则.
如果是这样,这段代码是有效的,如果MSVC不接受它,那就是一个错误.
但我没有发现这种标准特别清楚.有人能证实吗?