Ho appena notato sopra suPerché std :: uncaught_exception cambia in std :: uncaught_exceptions?
http://en.cppreference.com/w/cpp/error/uncaught_exception
che C++ 17 sostituirà std::uncaught_exception()
, che restituisce un bool
, con std::uncaught_exceptions()
, che restituisce un int
.
L'aggiunta allo standard che descrive questo è qui:
http://isocpp.org/files/papers/n4259.pdf
Non fornisce il razionale ma dice
[Nota: Quando uncaught_exceptions()> 0, il lancio di un'eccezione può dare in una chiamata di std :: terminate() (15.5.1). - end note]
che è stranamente vago.
Qual è la ragione di questo cambiamento? Sono possibili più eccezioni attive in C++ 17 o in una versione futura dello standard?
È possibile che esistano più eccezioni attive in tutte le versioni di C++. 'struct foo {~ foo() {try {throw new int; } catturare (...) {} } }; int main() {{foo f; lanciare un nuovo doppio; } catch (...) {}} 'ha due eccezioni attive mentre distruggiamo' f'. – Yakk
Vedere anche [questo CppCon 2015 talk] (https://github.com/CppCon/CppCon2015/blob/master/Presentations/Declarative%20Control%20Flow/Declarative%20Control%20Flow%20-%20Andrei%20Alexandrescu%20-% 20CppCon% 202015.pdf) di Andrei Alexandrescu per informazioni su 'ScopeGuard' e N4259. – Adversus