В чем смысл удалённого деструктора?

Я сталкиваюсь с правилом (раздел N3797::12.8/11 [class.copy])

Неявно объявленный конструктор копирования/перемещения является встроенным общедоступным член его класса. Конструктор копирования/перемещения по умолчанию для класса X определяется как удаленный (8.4.3), если X имеет:

[...]

- любой прямой или виртуальный базовый класс или нестатический член данных типа с деструктором, который удален или недоступен по умолчанию конструктор или

[...]

Но я не могу получить точку удалённого деструктора, появляющуюся в виртуальном или прямом базовом классе вообще. Рассмотрим следующий простой пример:

struct A
{
    ~A() = delete;
    A(){ }
};

struct B : A
{
    B(){ }; //error: use of deleted function 'A::~A()'
};

B b; 

int main() { }

DEMO

Мне это совершенно непонятно. Я определил конструктор 0-аргументов explcitly и не использует деструктор базового класса. Но компилятор думает иначе. Это не сработает, даже если мы явно определяем деструктор B:

struct A
{
    ~A() = delete;
    A(){ }
};

struct B : A
{
    B(){ };
    ~B(){ };
};

//B b;

int main() {
}

DEMO

Не могли бы вы прояснить эту вещь?

Ответы

Ответ 1

Обоснование этой пули описано в отчет о дефектах 1191: Удаленные деструкторы субобъектов и неявно определенные конструкторы, в которых говорится:

Рассмотрим следующий пример:

struct A {
   A();
   ~A() = delete;
};

struct B: A { };
B* b = new B;

В соответствии с действующими правилами B() не удаляется, но плохо сформирован, потому что он вызывает удаленный ~ A:: A(), если он выходит из исключения после завершение построения A. Удаленный подобъект-деструктор следует добавить в список причин неявного удаления в 12.1 [class.ctor] и 12.8 [class.copy].

и предлагаемая резолюция заключалась в том, чтобы добавить отмеченную выше марку и ту же формулировку в следующий раздел 12.1 [class.ctor], пункт 5:

любой прямой или виртуальный базовый класс или нестатический член данных имеет тип с деструктором, который удален или недоступен из стандартного конструктора по умолчанию.