2012-05-24 6 views
5

Los errores de compilación con las plantillas suelen ser poco claros y no se pueden descifrar fácilmente a menos que uno esté realmente bien versado en las plantillas. Muchas veces un programador experto podría estar desconcertado por esto. Estoy seguro de que la mayoría de nosotros hemos sentido el pinchazo muchas veces.¿Mensajes de error de diagnóstico más precisos con plantillas?

Según entiendo el C++ estándar solamente exige implementaciones para proporcionar un diagnóstico para un programa mal formada, pero no cómo lo que mensajes de diagnóstico se facilitará o .
Sin embargo, existen normas establecidas por el comité de Estándares para superar este problema de diagnósticos no fácilmente descifrables (especialmente) en el caso de las plantillas. ¿Alguna vez se ha presentado para una discusión? Además, ¿las implementaciones principales están haciendo algo al respecto o han planeado sobre este tema?

La pregunta es bastante abierto terminado para la discusión, pero con ser comunidad del SO C++ una de las comunidades más activas de C++ estoy seguro de que alguien en algún lugar debe tener al menos una idea de esto. Además, algunos de los miembros del comité de Normas (lo sé) participan activamente en la etiqueta C++, espero que puedan tener alguna información sobre esto si et al.

+0

clang ++ es una buena herramienta para esto. El mensaje de error es mucho mejor que los de g ++ y los que recuerdo de VS2005 (no he utilizado VS extensivamente desde entonces). –

+1

La respuesta a su pregunta es [Conceptos] (http://en.wikipedia.org/wiki/Concepts_%28C%2B%2B%29). Desafortunadamente, no estaban listos para C++ 11. –

Respuesta

5

Usted está pidiendo dos por separado preguntas

En primer lugar, sí, las implementaciones convencionales están haciendo algo al respecto. Puede no ser una prioridad para g ++ o msvc, pero esas no son las únicas implementaciones principales. Fue uno de los objetivos de diseño detrás de clang (ver http://clang.llvm.org/diagnostics.html), y al menos en algún momento Intel enumeró mejores errores de plantilla como un punto de venta para iC++ sobre msvc.

En segundo lugar, las personas del comité de estándares discutieron esto en detalle, y coincidieron en que los conceptos eran una gran parte de la respuesta, lo que significa que se postergaron desde que se eliminaron los conceptos del C++ 11 estándar.

3

Es definitivamente un problema, especialmente cuando la gente empieza a hacer cosas difícil con metaclases. La única herramienta que conozco que ayuda un poco es stlfilt, que "simplifica y/o reformatea mensajes de advertencia y error de C++ largos, con un enfoque en el diagnóstico relacionado con STL"

Cuestiones relacionadas