Se non erro viene garantito che verrà chiamato std::terminate, e per questo pare che comunque non si guadagni molto in prestazioni con i throw() vuoti, visto che comunque il compilatore alla fine fa:Originariamente inviato da shodan
nel qual caso il compilatore si fida e non genera il codice per gestire la cosa. Se però nella funzione qualcosa genera un'eccezione, il comportamento è indefinito (presumo; non ho lo standard sotto mano. In genere viene chiamata abort(), ma credo dipendenda dall'implementazione).
Il concetto di fondo degli specificatori di eccezioni credo che sia una cosa tipo la const-correctness, non tanto per aiutare il compilatore ma per dare garanzie al programmatore.codice:try { // tutto il codice della funzione } catch(...) { std::terminate(); }
In linea di massima per fortuna la maggior parte delle librerie fa ereditare la propria gerarchia di eccezioni da std::exception per evitare casini.In genere se una funzione genera un'eccezione, la cosa è documentata.Se è una funzione dello standard, la catturi con un generico catch (const std::exception& e) altrimenti occorre la documentazione.