Существуют следующая цитата из N3797::8.4.2/4 [dcl.fct.def.default]
:случая, когда предоставленный пользователь явно-дефолт функция определяется как удаленные
функции является пользователем при условии, если пользователь объявленного и явно не дефолт или удален по его первой декларации. Предоставленная пользователем функция с явно дефолтным значением (то есть явно дефолт по умолчанию после ее первого объявления ) определена в том месте, где оно явно по умолчанию; , если такая функция неявно определена как удаленная, программа плохо сформирована.
Я попытался придумать пример, отражающий это правило. Так, стандарт говорит:
Если определение класса не явно объявить конструктор копирования , один объявлен неявно. Если определение класса объявляет конструктор перемещения или оператор переадресации перемещения, неявно объявленный конструктор копирования определяется как удаленный;
следующий код должен выдавать ошибку о вызове удаленной функции:
#include <iostream>
using namespace std;
struct A
{
A(){ }
A(const A&&){ cout << "A(const&&)" << endl; }
A(const A&) = default;
};
A a;
A b = a;
int main() {
}
Но она отлично работает. Можете ли вы представить фактический пример, отражающий это?
Я думаю, что вы вводите в заблуждение термины * неявные * и * предоставленные пользователем *, если вы объявляете функцию, по определению она не * подразумевается *. Специальная функция может быть необязательно 'default' в первом объявлении, и в этом случае она не * предоставляется пользователем *, но это не делает ее неявной *. – user657267