vector move Problem MSVC2013
-
Hi,
ich versuche gerade mein altes Projekt auf MSVC2013 zu portieren. Leider kompiliert er Folgendes nicht mehr:
struct type {}; typedef std::vector<type> vType; class cl { private: vType a; public: void setInfo(vType b) { this->a = std::move(b); } };Ohne Move kein Problem, doch mit: Eine Kette von "siehe"-Hinweisen und letztendlich sagt er:
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(750): error C2677: Binärer Operator '+=': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::_Vector_iterator<std::_Vector_val<std::_Simple_typesRange::type>>' akzeptiert (oder keine geeignete Konvertierung möglich)
1> c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(758): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void std::_Distance2<_InIt,__w64 int>(_RanIt,_RanIt,_Diff &,std::random_access_iterator_tag)".hier:
template<class _RanIt, class _Diff> inline void _Distance2(_RanIt _First, _RanIt _Last, _Diff& _Off, random_access_iterator_tag) { // add to _Off distance between random-access iterators #if _ITERATOR_DEBUG_LEVEL == 2 if (_First != _Last) { // check for null pointers _DEBUG_POINTER(_First); _DEBUG_POINTER(_Last); } #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ _Off += _Last - _First; // <---------------- }Ich kann damit nichts anfangen und dachte mir, vll erstellt er für type nicht automatisch move-ctor/move-assignment-op. Jedoch ändert die Änderung zu:
struct type { type(type&&) {} type& operator=(type&&) {} };nichts.
Mein Projekt lief in MSVC2010. Ist MSVC2013 jetzt standardkonformer und mein Code nicht?
Freue mich über alle Antworten, vielen Dank und beste Grüße!
-
Also
#include <vector> struct type {}; typedef std::vector<type> vType; class cl { private: vType a; public: void setInfo(vType b) { this->a = std::move(b); } }; int main() { cl c; vType v; c.setInfo(v); }Kompiliert bei mir ganz normal, wo bekommst du da denn genau einen Fehler?