Я получил следующий фрагмент из Майкрософт
template <typename T> struct RemoveReference {
typedef T type;
};
template <typename T> struct RemoveReference<T&> {
typedef T type;
};
template <typename T> struct RemoveReference<T&&> {
typedef T type;
};
template <typename T> typename RemoveReference<T>::type&& Move(T&& t) {
return t;
}
...
remote_integer x = frumple(5);
remote_integer&& x1 = Move(x);
и я получаю сообщение об ошибке "ошибка C2440: 'return': невозможно преобразовать из 'remote_integer' в 'remote_integer &&'"
что-то изменилось в компиляторах? С std::move все идет как надо.
// TEMPLATE FUNCTION move template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); }
- person RedX   schedule 08.09.2011std::move
? - person Daniel Trebbien   schedule 08.09.2011move
, так как rvalue будет привязано к ссылке rvalue без него. - person Potatoswatter   schedule 08.09.2011