什么时候Gnu C ++会在没有明确要求的情况下支持C ++ 11?

时间:2014-01-19 19:20:06

标签: c++ gcc c++11 gcc4.8

目前,使用g ++ - 4.8.1,您必须通过

在C ++ 11模式下编译文件
g++ -std=c++11 -o prog.x prog.cpp

当我可以说

时是否有计划
g++ -o prog.x prog.cpp

编译prog.cpp

也许prog.cpp

  • #include <regex>
  • thread_local
  • class Widget { int member = 5; }
  • MyType operator"" myt(const char*, sze_t);
  • 等等。

4 个答案:

答案 0 :(得分:29)

GCC 6.0:https://gcc.gnu.org/gcc-6/changes.html

  

C ++的默认模式现在是-std=gnu++14而不是-std=gnu++98

答案 1 :(得分:20)

我认为我能得到的答案最接近的是info gcc命令:

  

修订后的ISO C ++标准于2011年作为ISO / IEC发布   14882:2011,被称为C ++ 11;在它出版之前   通常称为C ++ 0x。 C ++ 11包含了几处更改   C ++语言,其中大部分都是在实验中实现的   GCC中的C ++ 11模式。有关C ++ 11功能的信息   在实验C ++ 11模式中可用,请参阅   http://gcc.gnu.org/projects/cxx0x.html。要选择此标准   GCC,使用选项'-std = c ++ 11';获得所有诊断   标准要求,你还应该指定'-pedantic'(或   '-pedantic-errors'如果你想让它们成为错误而不是错误   警告)。

http://gcc.gnu.org/projects/cxx0x.html页面上写着:

  

重要:GCC对C ++ 11的支持仍然是实验性的。一些   功能是根据早期提案实施的,没有尝试   将在更新时保持向后兼容性   以匹配最终的C ++ 11标准。

libstdc++页面也显示它不完整。 (我甚至认为regex尚未实施。)

Steve Jessop's answer基本上在最后一段中说了同样的话,但引用他答案的第一部分:

  

C ++ 11已经标准化了几年,但编译器却没有   将其默认模式切换为C ++ 11,直到:

     
      
  • 绝对最低限度,C ++ 11支持在该编译器及其使用的库中完成。而且还稳定,如果是编译器   作家对可靠性一无所知。
  •   
  • 优选地,编译器中的主要版本号增加,因为C ++ 11与C ++ 03不完全向后兼容。
  •   
  • 理想情况下,根据众所周知的时间表,以便用户可以为变化做好准备。
  •   

答案 2 :(得分:13)

更新:过去28个月内,原始答案已过时。根据{{​​3}},GCC 6.1默认支持带有GNU扩展的C ++ 14。 GCC 6.1于2016年4月27日发布。我很惊讶但很高兴看到新标准的快速采用!

至于原始答案的其余部分,我仍然看到保留该部分的价值,以回答如何使某些标志“默认”。所以我把它放在下面。


  

当我可以说[...]

时,是否有计划

您可以在Makefile中定义默认标志,然后您要说的只是make

nobar's answer的已接听答案应该让您开始(或某些How do I enable C++11 in gcc?)。

Stackoverflow中经常出现的另一个建议是添加bash别名alias g++="g++ --std=c++0x",请参阅makefile tutorial如何。但是,我本人不会这样做,它会导致令人不快的意外; C ++ 11已经发生了重大变化。我会创建自己的makefile并只键入make


答案 3 :(得分:-3)

默认情况下,GCC 5.0将具有gnu11(c ++ 11 AFAIK的方言),并且在更改中共享c ++ 11的改进。见https://gcc.gnu.org/gcc-5/changes.html。它似乎也会对C ++ 14提供一些支持。

关于@ marc-glisse共享的bugzilla场景,其中一个更有趣的陈述似乎不在议事日程,详见https://gcc.gnu.org/gcc-5/criteria.html: -

  

已经对Bugzilla中开放的所有回归进行了分析,并且都是如此   被视为不太可能影响大多数用户,或被确定为   对受影响的用户影响最小。例如,印刷   诊断中的错误可能比较常见,但也很少   对用户的影响。

     

通常,编译器生成错误代码的回归,   或拒绝编制有效的程序,将被视为   足够严重以阻止释放,除非有实质性的   减轻因素。 - GCC发布标准页面

时间表确实可以确定何时以及是否会发生https://gcc.gnu.org/develop.html#timeline

所以希望到2015年我们应该看到一个新的gcc,其中支持c ++ 11作为默认值。当GNU / Linux发行版占用并且为使用c ++ 11构建的软件做任何他们需要做的事情时,这完全是另一个问题。