<algorithm>是否定义了宏X?

Dan*_*zes 7 c++ algorithm gcc stl

我尝试使用选项C++ 14 编译代码:

#define X static_cast<double>(2)
#include <algorithm>
// if you change the two lines, no error occurs

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我在X之后得到错误:

错误:预期','或'...'

我没有选择C++ 98的错误.使用我的gcc版本4.8.4,我没有得到错误,但我用5.4.0.这是一个错误吗?我做错了吗?

asc*_*ler 8

我在本地g ++ 5.4.0安装上遇到同样的错误.我查看了g++ -E输出,似乎错误跟踪到/usr/lib/gcc/x86_64-linux-gnu/5/include/ia32intrin.h第252和254行:

/* Write flags register */
extern __inline void
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__writeeflags (unsigned long long X) // 252
{
  __builtin_ia32_writeeflags_u64 (X); // 254
}
Run Code Online (Sandbox Code Playgroud)

这可以被认为是编译器捆绑库中的一个错误,因为非保留的#defines不应该与它们冲突.(同一标头中的其他功能使用参数__X.)

  • 这就是预处理器是邪恶的原因. (2认同)