Объекты только для перемещения могут передаваться в функции в качестве опорных параметров r-значения и в качестве обычных параметров без опорных значений В чем разница между этими двумя случаями?
См. NoRValueReference и rValueReference в следующем примере:
struct MoveOnly {
MoveOnly() = default;
MoveOnly(MoveOnly&&) = default;
MoveOnly& operator=(MoveOnly&&) = default;
MoveOnly(const MoveOnly&) = delete;
MoveOnly& operator=(const MoveOnly&) = delete;
};
void noRValueReference(MoveOnly val) {}
void rValueReference(MoveOnly&& val) {}
int main() {
MoveOnly a, b;
noRValueReference(std::move(a));
rValueReference(std::move(b));
}