2012-04-19 20 views
7

¿Cómo verifico la presencia de características individuales del lenguaje C++ 0x/C++ 11? Sé que Clang tiene un buen sistema para esto. ¿Qué hay de GCC, Visual Studio o Boost? Supongo que una forma de hacerlo es detectar la versión del compilador y relacionarla con las características introducidas en esa versión. Pero eso es engorroso. ¿Alguien ya ha hecho eso?Comprobación de características de C++ 11

+1

La respuesta directa sería escribir un código con esa característica y compilarla. – iammilind

+0

¿Por qué debería cerrarse esta pregunta? –

+0

@ Nordlöw: Dos personas votaron para cerrarlo como un duplicado de [esta pregunta] (http://stackoverflow.com/q/6095885/636019). – ildjarn

Respuesta

3

boost config viene con una secuencia de comandos para comprobar algunas características de C++ 11 pero no todas.

Genera un archivo de configuración con macros para cada característica.

+0

Creo que quisiste escribir algo después de * Ver: *. De todos modos, sí, Boost.Config es probablemente la mejor opción. Los chicos de Boost ya rastrean esa información para que no tenga que hacerlo: informan al equipo del compilador para saber con precisión cuándo fue lo suficientemente estable como para anunciarse, o en el caso de Clang solicitar nuevas banderas de verificación. –

+0

En realidad, fue un remanente de una borrador de respuesta. Lo eliminaré. Gracias. – mirk

3

Su herramienta de construcción puede ayudar con esto.

CMake tiene el comando try_compile que le permite comprobar si un ejemplo de código compilará y establecerá una variable en función del resultado de la compilación.

Por el momento acabo de utilizar las funciones más comúnmente compatibles, como auto mecanografía.

A menudo puede usar Boost para reemplazar las características faltantes de la biblioteca, y esta puede ser la mejor opción durante algunos años mientras se actualizan los compiladores y las bibliotecas y se corrigen los errores.

El C++ 11 función de lista de compatibilidad para GCC está aquí: http://gcc.gnu.org/projects/cxx0x.html

nota de la advertencia:

Importante: El apoyo de GCC para C++ 11 es todavía 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.

Cuestiones relacionadas