Ветвление операторов присваивания со значениями вместо ссылок

Этот вопрос возникает из вопросов, поднятых в этом ответе.

Обычно мы определяем операторы присваивания копирования для типа Tкак T& operator=(const T&)и перемещаем операторы присваивания для типа Tкак . ] Оператор T&=(T&&).

Однако что происходит, когда мы используем параметр-значение, а не ссылку?

class T
{
public:
  T& operator=(T t);
};

Это должно сделать T как копирование, так и перемещение присваиваемыми. Однако я хочу знать, каковы языковые разветвления для T?

В частности:

  1. Считается ли это оператором присваивания копирования для Tсогласно спецификации?
  2. Считается ли это оператором присваивания перемещения для Tсогласно спецификации?
  3. Будет ли Tиметь сгенерированный компилятором оператор присваивания копирования?
  4. Будет ли Tиметь сгенерированный компилятором оператор присваивания перемещения?
  5. Как это повлияет на такие классы свойств, как std::is_move_assignable?

14
задан Community 23 May 2017 в 12:20
поделиться