Comme prévu, le texte suivant ne se compile pas :
class A {
public:
A() = default;
//A(A&&) = default;
A(const A&) = delete;
int x;
};
int main()
{
auto a4 = A{}; // not ok, copy constructor is deleted
auto a5 = A(); // not ok, copy constructor is deleted
return 0;
}
Mais si un constructeur de déplacement est ajouté, même si le constructeur de copie est explicitement supprimé, alors ce qui suit se compile :
class A {
public:
A() = default;
A(A&&) = default;
A(const A&) = delete;
int x;
};
int main()
{
auto a4 = A{}; // now ok, even though copy constructor is deleted
auto a5 = A(); // now ok, even though copy constructor is deleted
return 0;
}
Pourquoi le constructeur de copies supprimées n'est-il pas pris en compte ?