De las preguntas frecuentes de Bjarne Stroustrup C ++ 0x :
__cplusplus
En C ++ 0x, la macro __cplusplusse establecerá en un valor que difiera de (sea mayor que) el actual 199711L.
Aunque esto no es tan útil como a uno le gustaría. gcc(aparentemente durante casi 10 años) tenía este valor establecido en 1, descartando un compilador principal, hasta que se corrigió cuando salió gcc 4.7.0 .
Estos son los estándares de C ++ y el valor que debería poder esperar en __cplusplus:
- C ++ anterior a C ++ 98:
__cpluspluses 1.
- C ++ 98:
__cpluspluses 199711L.
- C ++ 98 + TR1: Esto se lee como C ++ 98 y no hay forma de verificar que yo sepa.
- C ++ 11:
__cpluspluses 201103L.
- C ++ 14:
__cpluspluses 201402L.
- C ++ 17:
__cpluspluses 201703L.
Si el compilador puede ser más antiguo gcc, debemos recurrir a la piratería informática específica del compilador (mire una macro de versión, compárela con una tabla con características implementadas) o use Boost.Config (que proporciona macros relevantes ). La ventaja de esto es que realmente podemos elegir características específicas del nuevo estándar y escribir una solución si falta la característica. Esto a menudo se prefiere a una solución mayorista, ya que algunos compiladores afirmarán que implementan C ++ 11, pero solo ofrecen un subconjunto de las características.
El Stdcxx Wiki alberga una matriz completa para el soporte del compilador de las características de C ++ 0x (si se atreve a verificar las características usted mismo).
Desafortunadamente, una verificación más detallada de características (por ejemplo, funciones de biblioteca individuales como std::copy_if) solo se puede realizar en el sistema de compilación de su aplicación (ejecute el código con la característica, verifique si se compiló y produjo resultados correctos: autoconfes la herramienta de elección si toma esta ruta).