Mi compilador del sistema (gcc42) funciona bien con las características TR1 que quiero, pero tratando de admitir versiones de compilador más nuevas que los sistemas, tratando de acceder a las cabeceras TR1 un #error que exige la opción -std = C++ 0x debido a cómo se interconecta con la biblioteca o alguna burbuja de hub así.GNU C++ cómo verificar cuándo -std = C++ 0x está en efecto?
/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.
tener que suministrar un interruptor extra es ningún problema, para apoyar GCC 4.4 y 4.5, bajo este sistema (FreeBSD), pero es obvio que cambia la imagen!
Usando mi sistema compilador (g ++ dialecto 4,2 por defecto):
#include <tr1/foo>
using std::tr1::foo;
Usando nuevos (4.5) versiones del compilador con -std = C++ 0x:
#include <foo>
using std::foo;
¿Hay alguna forma usando el preprocesador, ¿puedo decir si g ++ se está ejecutando con las características C++ 0x habilitadas?
Algo como esto es lo que estoy buscando:
#ifdef __CXX0X_MODE__
#endif
pero no he encontrado nada en el manual o fuera de la web.
A este ritmo, estoy empezando a pensar que la vida sería más fácil, usar Boost como una dependencia y no preocuparse por un nuevo estándar de lenguaje que llegue antes de TR4 ... jeje.
Hasta que GCC agregue en el nuevo __cplusplus definido que las opciones más portátiles serían agregar '# si está definido (__ GXX_EXPERIMENTAL_CXX0X__) || __cplusplus> = 201103L ' – gnash117
¿Es lo mismo para '-std = C++ 11' y GCC4.8.1? – Manu343726