Вы не можете ожидать ничего хорошего от возврата &&
локальному объекту так же, как от возврата обычной ссылки / указателя на локальный объект.
Вы должны вернуть по значению.В C ++ 03 это ситуация, когда компилятору разрешено оптимизировать удаленные вызовы конструктора копирования.В C ++ 0x это означает, что (если копирование невозможно оптимизировать - например, компиляторы не управляют им при возврате другого объекта из разных ветвей), вместо конструктора копирования будет вызываться конструктор перемещения (если он доступен)чтобы получить значение из функции.
Насколько я понимаю, семантика перемещения должна включаться автоматически в тех местах, где это безопасно, а типы ссылочных параметров rvalue позволяют вам определить, является ли аргументзначение (то, что вы можете явно переместить) или нет.