В новой книге Скотта Мейера он предлагает пример использования для спецификаторов ссылок rvalue, которые выглядят примерно так:
class Widget {
private:
DataType values;
public:
DataType& data() & { return values; }
DataType data() && { return std::move(values); } // why DataType?
};
Итак, чтобы:
auto values = makeWidget().data();
move-constructs values вместо копирования-конструирования.
Почему rvalue-ref-qual data() возвращает DataType вместо DataType&&? auto все равно выводит DataType в этом случае (хотя decltype(auto) не будет - но это не может быть единственной причиной, чтобы предпочесть возвращать значение вместо ravlue ref). Этот одобренный ответ возвращает rvalue ref, что делает меня концептуально понятным.