Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, jazzer, Вы писали:
NB>>>это к вопросу о том, для чего нужен std::move
J>>так я же уже сказал: чтобы из lvalue типа TOnlyMovable&&, сделать xvalue того же самого типа TOnlyMovable&&.
NB>не пойму я тебя. здесь
NB>NB>void foo(TOnlyMovable&& object) {
NB> TOnlyMovable m(std::move(object));
NB>}
NB>
NB>std::move нужен? если не нужен, то какой по твоему вызовется конструктор?
нужен, чтоб lvalue типа TOnlyMovable&& превратить в xvalue того же самого типа TOnlyMovable&& — тогда из перегрузке будет выбран конструктор перемещения.
Тип rvalue reference и там, и там, разница в lvalue/xvalue.
т.е. lvalue типа TOnlyMovable&& свяжется с аргументом типа TOnlyMovable&,
а xvalue типа TOnlyMovable&& свяжется с аргументом типа TOnlyMovable&&
Ты посмотри на мой пример в ideone, там есть над чем подумать.