Этот вопрос исходит из вопросов, поднятых этим ответом.
Обычно мы определяем операторы присваивания копий для типа T
как T& operator=(const T&)
и переносим операторы присваивания для типа T
как T& operator=(T&&)
.
Однако, что происходит, когда мы используем параметр значения, а не ссылку?
class T
{
public:
T& operator=(T t);
};
Это должно сделать T копировать и перемещать присваиваемые. Однако, что я хочу знать, каковы разветвления языка для T
?
В частности:
- Учитывается ли это как оператор присваивания копии для
T
, в соответствии со спецификацией? - Учитывается ли это как оператор присваивания перемещения для
T
в соответствии со спецификацией? - Будет ли
T
иметь оператор присваивания сгенерированного компилятором? - Будет ли
T
иметь оператор присваивания с помощью компилятора? - Как это влияет на классы признаков, такие как
std::is_move_assignable
?