So ist std::move in der STL von Visual C++ implementiert (der C-Cast evaluiert zu static_cast):
Code: Alles auswählen
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
move(_Ty&& _Arg)
{ return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); }
Code: Alles auswählen
template<typename _Tp>
inline typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t)
{ return __t; }
warning: returning reference to temporary
bzw.
error C2440: 'return' : cannot convert from 'x' to 'x&&'
You cannot bind an lvalue to an rvalue reference
Visual C++’ Meldung kann ich nachvollziehen – ist es ja ein fundamentales Konzept, dass benannte rvalue References immer als lvalue References behandelt werden –, GCCs nicht.
Was läuft falsch; wie sähe eine fehlerfreie bzw. unter beiden kompilierbare Implementierung aus?
Gruß, Ky
Und danke an Cat für die „Ansicht erweitern“-Buttons!