Рассмотрим два возможных определения класса:
Выставка:
struct A
{
A() = delete;
};
Выставка’:
struct A
{
A() noexcept = delete;
}
Есть ли смысл объявлять удаленную функцию как noexcept
?
(Первоначально опубликовал это как комментарий, но рекомендуется опубликовать как ответ.)
Просто нет. Удаленная функция не может быть вызвана (или, в случае конструктора, использована для инициализации объекта), не говоря уже об исключении.
Редактировать:
HVD упоминается в комментариях ниже, что noexcept(f())
не звонит f()
, Если конструктор класса A
является delete
потом noexcept(A())
не скомпилируется, независимо от того, объявлен ли конструктор noexcept
, Это (по существу) является следствием требования noexcept(expression)
дать правильное выражение — и выражение A()
для класса A
Требуется действительный конструктор.
Revolver_Ocelot также правильно указывает, что перегрузка невозможна noexcept
(т.е. невозможно иметь две функции с одинаковой сигнатурой, за исключением того, что одна noexcept
а один нет) Итак, в рамках определения класса A
, и то и другое A() = delete
а также A() noexcept = delete
оба имеют одинаковый эффект, то есть класс A
не имеющий конструктора без аргументов.
Других решений пока нет …