Я просматриваю код, и вижу следующую функцию:
template <typename... Args>
static return_t make_return(Args &&... args)
{
// using std::forward<Args> will preserve lvalue args as such, but the point of this function
// is to make a return, where the 99.9+% case is moving a local (lvalue) into the return pack.
// Thus it forces a move, which will move 'T&' args (but _not_ 'const T&' args) into the
// return pack so that users don't need to type out a bunch of std::moves themselves/
// If they don't want implicit move they can just call std::make_tuple directly
return std::make_tuple(std::move(args)...);
}
Документация здесь меня смущает.
Зачем вам явно перемещать ссылку на пересылку?
Не хотите ли вы сохранить lvalue/rvalue в общем контексте?
У меня возникли проблемы с пониманием обоснования или того, как это поведение будет отличаться от рекомендованного std::forward
.
Иными словами,
Я никогда не видел, чтобы кто-то явно отказывался от безупречной пересылки ссылки на пересылку.
Имеет ли это смысл?