C++ Noexcept

Da Andreabont's Wiki.

In C++11 la parola chiave noexcept è sia un modificatore applicabile ad una funzione o metodo per indicare che quella porzione di codice, se eseguita, non lancia mai eccezioni, e anche un operatore che, passandogli la funzione, restituisce true se questa non può lanciare eccezioni, false altrimenti.

Modificatore

void funzione_senza_eccezioni() noexcept;
auto lambda_senza_eccezioni = []() noexcept {};

Il modificatore accetta come argomento un valore booleano, se false questo "disattiva" il modificatore, permettendo di attivarlo solo sotto una condizione data da un'espressione costante (che sia calcolabile a compile-time):

void funzione_senza_eccezioni() noexcept(true);

Operatore

std::cout << std::boolalpha << noexcept(funzione_senza_eccezioni()) << std::endl;
std::cout << std::boolalpha << noexcept(lambda_senza_eccezioni) << std::endl;

Notare che è possibile definire delle dipendenze usando la parola chiave sia come modificatore che come operatore:

void funzione_senza_eccezioni() noexcept;
auto lambda_senza_eccezioni = []() noexcept(noexcept(funzione_senza_eccezioni())) {};