(Wysłany ten początkowo jako komentarz, ale zaleca się dodawać jako odpowiedź.)
Proszę, nie. Usunięta funkcja nie może zostać wywołana (lub, w przypadku konstruktora, użyta do zainicjowania obiektu), nie mówiąc już o wyrzuceniu wyjątku.
Edit:
HVD wspomniano w komentarzach poniżej tego noexcept(f())
nie wymaga f()
. Jeśli konstruktorem klasy A
jest delete
d, to noexcept(A())
nie powiedzie się skompilować, niezależnie od tego, czy konstruktor jest zadeklarowany jako noexcept
. Jest to (w zasadzie) konsekwencją wymogu, aby noexcept(expression)
nadano poprawne wyrażenie - a wyrażenie A()
dla klasy wymaga prawidłowego konstruktora.
Revolver_Ocelot również poprawnie wskazuje, że nie ma możliwości przeciążenia na noexcept
(tj. Nie jest możliwe posiadanie dwóch funkcji z tą samą sygnaturą, z tą różnicą, że jest to noexcept
, a jedna nie jest). Tak więc, w ramach definicji klasy A
oba mają ten sam efekt, tj. Klasa A
nie ma konstruktora nie będącego argumentem.
Po prostu nie. Usunięta funkcja nie może zostać wywołana (lub, w przypadku konstruktora, użyta do zainicjowania obiektu), nie mówiąc już o wyrzuceniu wyjątku. – Peter