(gelöst)[C++] Implementierung von std::move()
Verfasst: 28.11.2010, 15:21
Hi,
So ist std::move in der STL von Visual C++ implementiert (der C-Cast evaluiert zu static_cast):und so in der von GCC 4.5 (Include-Ordner heißt mingw32\4.4.1):
Jede Implementierung führt unter dem jeweils anderen Compiler zu
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!
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!