gcc 4.8.1 如何指定__cplusplus的值?

naturemickey 2014-07-25 07:43:25
在C++11的标准中有一部分新的库函数被这样子定义了(例如):
#if __cplusplus >= 201103L
void
push_front(value_type&& __x)
{ this->_M_insert(begin(), std::move(__x)); }

template<typename... _Args>
void
emplace_front(_Args&&... __args)
{ this->_M_insert(begin(), std::forward<_Args>(__args)...); }
#endif

但我不知道如何修改__cplusplus的值。
无论我在编译参数中用-D重定义宏,还是在代码中直接#define定义它,在编译时都会报警告:
warning: "__cplusplus" redefined [enabled by default]

所以请教一下,在gcc4.8.1中如何使用新标准中被#if __cplusplus >= 201103L扩起来的函数?
...全文
1185 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2014-07-26
  • 打赏
  • 举报
回复
介不是个可以随便改着玩儿的宏,升级编译器是正规解决之道。
碼上道 2014-07-25
  • 打赏
  • 举报
回复
加上选项 -std=c++11
taodm 2014-07-25
  • 打赏
  • 举报
回复
-std=gnu++11
Cnwanglin 2014-07-25
  • 打赏
  • 举报
回复
查一下GCC 的 手册,看下这种方法可以吗
Cnwanglin 2014-07-25
  • 打赏
  • 举报
回复
cplusplus_redef 允许在命令行中通过 -D 选项重新定义以常规方式预定义的宏 __cplusplus。不允许在源代码中使用 #define 指令重新定义 __cplusplus。示例: CC —features=cplusplus_redef —D__cplusplus=1 ... g++ 编译器通常将 __cplusplus 宏预定义为 1,而某些源代码可能依赖于此非标准值。(对于实现了 1998 C++ 标准或 2003 更新的编译器,标准值是 199711L。对于该宏,将来的标准要求采用更大的值。) 除非您需要将 __cplusplus 重新定义为 1 以编译打算供 g++ 使用的代码,否则不要使用此选项

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧