Почему идеальная пересылка (перехват) не работает для реализации копирования-назначения?
В классе с серией ctors (большинство из которых имеют ровно один аргумент), я хочу, чтобы все ctor с одним аргументом также были отражены соответствующим оператором присваивания. Которы включают в себя, но не ограничиваются копи-ctor и move-ctor. Так что это должно удовлетворять правилу пяти.
template <typename T>
object& operator=(T&& from) {
// ...
return *this;
}
Вот минимальный пример: https://ideone.com/OKprcr (спасибо @Daniel H за указание на постоянство).
Я получаю ошибку
error: object of type 'object' cannot be assigned because its copy assignment operator is implicitly deleted
...
note: copy assignment operator is implicitly deleted because 'object' has a user-declared move constructor
Почему шаблон функции не реализует оператор копирования-назначения?
1 ответ
Почему шаблон функции не реализует оператор копирования-назначения?
Поскольку стандарт так говорит ([class.copy.assign]/1):
Объявленный пользователем оператор копирования
X::operator=
является нестатической не шаблонной функцией - членом классаX
с ровно одним параметром типаX
,X&
,const X&
,volatile X&
или жеconst volatile X&
,
Обратите внимание, что нет X&&
там тоже.