C++ ISO noexcept de noexcept
(1)
En el estándar de C ++ ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf )
Existe la siguiente definición:
template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
noexcept(noexcept(swap(*a, *b)));
¿Qué hace noexcept(noexcept(swap(*a, *b)))
?
Tener el noexcept(x)
en una declaración de función significa que la función no se lanza si y solo si x
evalúa como true
.
noexcept(y)
también se puede usar como operator , evaluando a true
si y
es una expresión de no lanzar, y a false
si y
potencialmente puede lanzar.
Combinado, esto significa void foo() noexcept(noexcept(y));
significa: foo
es no lanzar exactamente cuando y
no es lanzar.
En el caso de la pregunta, se declara que la función de swap
plantillas para matrices no es lanzada si y solo si el intercambio de miembros individuales de las matrices es no lanzable, lo que tiene sentido.