【发布时间】:2023-03-09 18:42:01
【问题描述】:
我的系统编译器 (gcc42) 可以与我想要的 TR1 功能一起正常工作,但尝试支持系统以外的更新编译器版本,尝试访问 TR1 标头 #error 需要 -std=c++0x 选项,因为了解它如何与库或类似的一些集线器 bub 交互。
/usr/local/lib/gcc45/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
必须提供一个额外的开关是没有问题的,在这个系统(FreeBSD)下支持 GCC 4.4 和 4.5,但显然它改变了画面!
使用我的系统编译器(g++ 4.2 默认方言):
#include <tr1/foo>
using std::tr1::foo;
使用带有 -std=c++0x 的较新 (4.5) 版本的编译器:
#include <foo>
using std::foo;
无论如何使用预处理器,我可以判断 g++ 是否在启用 C++0x 功能的情况下运行?
我正在寻找这样的东西:
#ifdef __CXX0X_MODE__
#endif
但我没有在手册或网上找到任何内容。
按照这个速度,我开始认为生活会更轻松,将 Boost 用作依赖项,而不必担心新的语言标准会在 TR4 之前出现......呵呵。
【问题讨论】: