c++ c++11 c++14 noexcept

c++ - ¿Hay un especificador de noexcept automático?



c++11 c++14 (1)

Actualmente no hay ninguno. Sin embargo, hay una propuesta sobre ese tema, que propone la noexcept(auto) : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4473 El estado de esta propuesta es "necesita trabajo adicional", según el Informe de viaje de Botond Ballo: reunión de estándares de C ++ en Lenexa, mayo de 2015 " https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/

Más trabajo. La dirección de la propuesta es prometedora, pero o bien no está bien desarrollada o hay preocupaciones específicas con uno o más puntos de diseño. Se alienta al autor a que regrese con una propuesta modificada que sea más completa y / o que aborde las inquietudes expresadas.

...

noexcept (auto), que básicamente significa "deducir el noexcept-ness de esta función del noexcept-ness de las funciones a las que llama. Al igual que la deducción por tipo de retorno, esto requiere que el cuerpo de la función esté disponible en cada unidad de traducción que usa la función. Se planteó que, junto con la propuesta de hacer que las especificaciones de excepción formen parte del sistema de tipos, esto significaría que modificar el cuerpo de la función podría cambiar el tipo de la función (de nuevo de manera similar a devolver la deducción del tipo), pero a las personas no les preocupaba demasiado ese.

He escuchado que la palabra clave noexcept es más como "nunca debería lanzar una excepción" en lugar de "no lo hace".

No creo que sea bueno usar la palabra clave noexcept si no estoy seguro de que sea una excepción o no, pero la palabra clave noexcept veces está relacionada con el rendimiento, como en un constructor de movimientos.

Así que traté de usar los calificadores noexcept , pero se vuelve más difícil si tiene varias declaraciones en la definición y se convierte en una especie de copiar y pegar.

template <class T> void f(T&& t) noexcept(noexcept(statement_1) && noexcept(statement_2) && noexcept(statement_3) && noexcept(statement_4) && noexcept(statement_5)) { statement_1; statement_2; statement_3; statement_4; statement_5; }

Creo que el compilador puede determinar si la definición de una función consiste en sentencias de no lanzar, por lo que será más fácil utilizar noexcept si hay una expresión como noexcept(auto) , pero parece que no hay tal cosa en el estándar .

¿Hay alguna manera de simplificar la expresión noexcept?