ultima create compiler compilador c++ gcc c++11 gcc4.8

create - ¿Cuándo Gnu C++ soportará C++ 11 sin pedirlo explícitamente?



makefile linux c (4)

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

El modo predeterminado para C ++ ahora es -std=gnu++14 lugar de -std=gnu++98 .

Actualmente, con g ++ - 4.8.1 tienes que compilar un archivo en modo C ++ 11 vía

g++ -std=c++11 -o prog.x prog.cpp

¿Hay un plan cuando solo puedo decir

g++ -o prog.x prog.cpp

compilar prog.cpp ?

Tal vez prog.cpp tiene

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

Lo más parecido a una respuesta que puedo obtener es del comando info gcc :

En 2011 se publicó un estándar revisado de ISO C ++ como ISO / IEC 14882: 2011, y se lo conoce como C ++ 11; antes de su publicación se denominaba comúnmente C ++ 0x. C ++ 11 contiene varios cambios en el lenguaje C ++, la mayoría de los cuales se han implementado en un modo experimental C ++ 11 en GCC. Para obtener información sobre las características de C ++ 11 disponibles en el modo experimental C ++ 11, consulte http://gcc.gnu.org/projects/cxx0x.html . Para seleccionar este estándar en GCC, use la opción ''-std = c ++ 11''; para obtener todos los diagnósticos requeridos por la norma, también debe especificar ''-pedantic'' (o ''-pedantic-errors'' si desea que sean errores en lugar de advertencias).

La página http://gcc.gnu.org/projects/cxx0x.html dice:

Importante: El soporte de GCC para C ++ 11 aún es experimental. Algunas funciones se implementaron en base a las primeras propuestas, y no se intentará mantener la compatibilidad con versiones anteriores cuando se actualicen para que coincidan con el estándar final de C ++ 11.

La página libstdc++ también muestra que está incompleta. (Ni siquiera creo que regex se haya implementado todavía).

La respuesta de Steve Jessop básicamente dice lo mismo en el último párrafo, pero para citar la primera parte de su respuesta:

C ++ 11 ha sido estándar durante un par de años, pero un compilador no cambiará su modo predeterminado a C ++ 11 hasta que:

  • Como mínimo, el soporte de C ++ 11 está completo en ese compilador y en las bibliotecas que usa. Y también estable, si el escritor del compilador tiene alguna preocupación en cuanto a la fiabilidad.
  • Preferiblemente, un número de versión mayor aumenta en el compilador, ya que C ++ 11 no es completamente compatible con C ++ 03.
  • Idealmente, en un horario bien conocido para que los usuarios puedan prepararse para el cambio.

Parece que GCC 5.0 tendrá gnu11 (dialecto de c ++ 11 AFAIK) de forma predeterminada con mejoras en c ++ 11 como compartidas en los cambios. Ver https://gcc.gnu.org/gcc-5/changes.html . Parece que también tendrá algo de apoyo para C ++ 14.

Una de las afirmaciones más interesantes en cuanto al escenario de bugzilla compartido por @marc-glisse parece estar fuera de lugar, ver https://gcc.gnu.org/gcc-5/criteria.html para más detalles:

Se han analizado todas las regresiones abiertas en Bugzilla, y se considera que todas ellas son poco probables de afectar a la mayoría de los usuarios o se ha determinado que tienen un impacto mínimo en los usuarios afectados. Por ejemplo, un error tipográfico en un diagnóstico puede ser relativamente común, pero también tiene un impacto mínimo en los usuarios.

En general, las regresiones en las que el compilador genera código incorrecto o se niega a compilar un programa válido se considerarán suficientemente severas para bloquear la publicación, a menos que existan factores mitigantes sustanciales. - Página de criterios de lanzamiento de GCC

La línea de tiempo da una idea de cuándo y si sucederá https://gcc.gnu.org/develop.html#timeline

Así que con suerte deberíamos ver un nuevo gcc con compatibilidad con c ++ 11 como predeterminado para el año 2015. Cuando las distribuciones de GNU / Linux tomarán el control y harán lo que sea necesario para los softwares que se están creando con c ++ 11 es otra cuestión.


ACTUALIZACIÓN: la respuesta original se ha quedado obsoleta en los últimos 28 meses. Según la respuesta de nobar , GCC 6.1 admite C ++ 14 con extensiones de GNU por defecto. GCC 6.1 fue lanzado el 27 de abril de 2016. ¡Estoy bastante sorprendido, pero muy feliz de ver una adopción tan rápida del nuevo estándar!

En cuanto al resto de la respuesta original, todavía veo valor en mantener esa parte que responde cómo hacer que ciertas banderas sean "predeterminadas". Así que lo guardé a continuación.

¿Hay un plan cuando puedo decir [...]

Puede definir indicadores predeterminados en un Makefile y luego todo lo que tiene que decir es make .

La respuesta aceptada para ¿Cómo habilito C ++ 11 en gcc? debería comenzar (o algún tutorial de makefile ).

Otro consejo que parece aparecer a menudo aquí en es agregar un alias bash alias g++="g++ --std=c++0x" , mira here cómo. Sin embargo, yo personalmente no haría esto, puede llevar a sorpresas desagradables; ha habido cambios bruscos con C ++ 11. Crearía mi propio archivo MAKE y escribiría simplemente make .