(Pubblicato questo inizialmente come un commento, ma incoraggiati a inviare come risposta.)
semplicemente, no. Una funzione che è stata cancellata non può essere chiamata (o, nel caso di un costruttore, usata per inizializzare un oggetto) e tanto meno lanciare un'eccezione.
Edit:
hvd citato nei commenti qui sotto che noexcept(f())
non chiama f()
. Se il costruttore della classe A
è delete
d, allora noexcept(A())
non verrà compilato, indipendentemente dal fatto che il costruttore sia dichiarato noexcept
. Questa è (essenzialmente) una conseguenza del requisito che a noexcept(expression)
venga assegnata un'espressione valida - e un'espressione A()
per una classe A
richiede un costruttore valido.
Revolver_Ocelot indica inoltre che non è possibile eseguire il sovraccarico su noexcept
(vale a dire che non è possibile avere due funzioni con la stessa firma, tranne che una è noexcept
e una non è). Pertanto, all'interno di una definizione della classe A
, sia lo A() = delete
sia lo A() noexcept = delete
hanno entrambi lo stesso effetto, vale a dire la classe A
che non ha un costruttore senza argomenti.
Semplicemente, no. Una funzione che è stata cancellata non può essere chiamata (o, nel caso di un costruttore, usata per inizializzare un oggetto) e tanto meno lanciare un'eccezione. – Peter