versiones dev compiler c++ c++11

dev - c++17



C++ 0x-exportación desaparecida, especificaciones de excepción en desuso. ¿Esto afectará tu código? (7)

Este último informe de viaje de Herb Sutter sobre el proceso de estandarización de C ++ 0x indica que el comité ha decidido descartar completamente el concepto de "exportación" de plantillas y desaprobar las especificaciones de excepción.

Creo que ambos son buenos movimientos, pero me interesa si alguien tiene una base de código donde estos cambios les causarán noches de insomnio.


Ciertamente no derramaré una lágrima por la especificación de excepción. ("Una buena idea que, desafortunadamente, nunca se noexcept "). Todos ellos fueron buenos para lo que ahora noexcept sinónimo.

Pero esperaba que la export lo lograra. Como mínimo, la export le permitiría cambiar las funciones de ayuda para las plantillas sin tener que volver a compilar todo el código usando esas plantillas. Y nos libraría de todos esos espacios de nombres detail :

namespace detail { // actually we don''t want this public, but can''t avoid it template<typename T> void f_helper() { /*---*/ } } template<typename T> void f() {detail::f_helper();} void g() {f<int>();} // has to recompile if f_helper()''s implementation changes

Por desgracia, como solo uno de los compiladores que tuve que usar durante la última década lo implementó, nunca lo pude usar.


Ciertamente, no hay noches de insomnio en ninguna de las bases de código en las que he estado involucrado durante los últimos 5 a 6 años. No creo que me haya topado con nadie que haya export , además de expertos como Herb Sutter han estado criticando las especificaciones de excepción (aparte de ahora) durante tanto tiempo que la mayoría de los programadores ya han recibido el mensaje.


Creo que ambos movimientos son buenos y ninguno me causará ningún dolor y me gusta la aclaración de la intención con respecto a la no noexcept .



He estado programando en C ++ desde cfront 1.0, y me complace decir que nunca escribí una especificación de excepción ni permití una en el código del cual era responsable. Cuando se los propusieron, llamé a Bjarne Stroustrup por teléfono y grité: "¡No lo hagas!" Les di todas las razones por las que eran una idea horrible. Para mi sorpresa, dijo algo como: "Lo sé". Cuando pregunté por qué la característica de Hades iba a entrar en la especificación, él dijo que había un Gran Jugador cuyos "expertos" insistían resueltamente en que tenía que ir a la especificación o no firmarían, período, final de la discusión. . Si alguna vez supe quién era, lo he olvidado.

He estado en desuso desde hace mucho tiempo. :-)


Me imagino que cualquier compilador que los admita ahora continuará dándoles soporte en el futuro inmediato como extensiones opcionales para que la gente aún pueda compilar su código existente.


export nunca se implementó correctamente en gcc o MSVC, (pero aparentemente fue así en EDG / Comeau, como dicen los comentarios), pero creo que nunca tuvo una aceptación generalizada. (Pero principalmente vivo en el mundo gcc / msvc, por lo que mi punto de vista no abarca toda la comunidad de C ++).

En cuanto a las especificaciones de excepción, creo que también estaban rotas.

Tercero, la desaprobación no significa errores de compilación por la causa. Simplemente se recomienda que el usuario no lo use y, si corresponde (no tanto aquí, creo), pase a otros mecanismos para lograr el mismo objetivo.