Здравствуйте, malegkin, Вы писали:
M>Волнует в первую очередь move semantics / передача и возврат объектов между функциями.
С этим тут плохо.
Простой
return out; и короче записывается и работать будет быстрее.
А
return std::move( out ); — это пессимизация.
Код вида
return std::move(something) нужен совсем в других ситуациях (очень редких), например во всяких string_builder'ах:
S&& append(S&& obj, const T& diff) {
obj.apply(diff);
return std::move(obj);
}