Почему идеальная пересылка (перехват) не работает для реализации копирования-назначения?

В классе с серией 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&& там тоже.

Другие вопросы по тегам