Предположим, у нас есть этот код:
class A {
public:
A() = default;
A(const A&) = delete;
~A() = default;
};
class B {
public:
B() : a{} { }
A a[1];
};
int main()
{
B b;
}
Этот код компилируется на последних версиях GCC 9.2, Clang 9.2 и MSVC 19.22.
Но когда я изменяю деструктор A по умолчанию на ~A() { }
GCC возвращает ошибку use of deleted function 'A::A(const A&)'
. Clang и MSVC все еще компилируются.
Когда я пишу конструктор копирования A
, GCC компилируется, но во время выполнения этот конструктор никогда не вызывался. Для чего GCC нужен конструктор копирования? Это ошибка GCC? (Я пробовал все версии GCC на GodBolt.org, та же ошибка.)