Существует правило о случаях, когда конструктор copy/move неявно удален:
Неявно объявленный конструктор копирования/перемещения является встроенным общедоступным член его класса. Конструктор копирования/перемещения по умолчанию для класса X определяется как удаленный (8.4.3), если X имеет:
[...]
- любой прямой или виртуальный базовый класс или нестатический член данных типа с деструктором, который удален или недоступен по умолчанию конструктор или
[...]
Потому что я не могу найти пример, отражающий правило, мне это не ясно. Рассмотрим следующий код:
struct A
{
~A() = delete;
};
struct B : A
{
A a;
B(){ }; //error error: attempt to use a deleted function B(){ };
B(const B&&) = delete;
};
B *b = new B;
int main() { }
Из-за удаленного перемещения конструктор не принимает участия в разрешении перегрузки, я ожидал, что ошибка будет чем-то вроде "Конструктор копирования неявно удален". Но вместо этого я получил ошибку об удаленном B()
, который я определил явно. Не могли бы вы привести пример, отражающий это правило?