Еще одна std::move почему std::move предотвращает (неназванный) возврат-значение-оптимизацию? " вопрос:
Почему std :: move предотвращает RVO? объясняет, что стандарт специально требует, чтобы объявленный тип возвращаемой функции должен соответствовать типу выражения в операторе return. Это объясняет поведение соответствующих компиляторов; однако это не объясняет обоснования ограничения.
Почему правила для RVO не делают исключение для случая, когда возвращаемый тип функции - T а тип return выражения - T&&?
Я также осознаю, что реализация таких вещей в компиляторах не предоставляется бесплатно. Я предлагаю только исключить такое исключение, но не обязательно.
Я также знаю, что return std::move(...) не требуется, поскольку С++ 11 уже требует, чтобы семантика перемещения использовалась, когда RVO не может быть применено. Тем не менее, почему бы не переносить явный запрос на оптимизацию, а не превращать его в пессимизацию?
(Помимо этого: почему return-value-optimization и rvo не являются синонимами?)