Copy elision удаляет промежуточный объект, он даже не конструируется, а с мувом у тебя будет два объекта получается. Тот который создаётся и тот из которого ты муваешь. Где же это логично?
Я правильно понял, что когда функция объявляет локальный объект, что-то с ним делает, а потом его возвращает, то на самом деле все действия производятся с объектом, созданным на вызывающей стороне?