http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52745
Bug #: 52745 Summary: GCC4.7 vector uses copy instead of move constructor Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: j.w.rogers+...@gmail.com Using GCC 4.7.0, vector seems to prefer copy rather than move when resizing. The following program produces different (and I think incorrect) results under GCC 4.7.0 vs GCC 4.6.1 #include <iostream> #include <vector> struct Stuff { Stuff( ) { } Stuff( Stuff&& o ) { std::cout << "Move" << std::endl; } Stuff( const Stuff& o ) { std::cout << "Copy" << std::endl; } }; int main( const int argc, const char** argv ) { std::vector< Stuff > stuff; std::cout << "1" << std::endl; stuff.push_back( Stuff() ); std::cout << "2" << std::endl; stuff.push_back( Stuff() ); std::cout << "3" << std::endl; stuff.push_back( Stuff() ); } Here is the output under GCC 4.6.1 jonathan@grindserv:~$ g++-4.6.1 -std=c++0x test.cpp jonathan@grindserv:~$ ./a.out 1 Move 2 Move Move 3 Move Move Move Here is the output under GCC 4.7.0 jonathan@grindserv:~$ g++-4.7.0 -std=c++0x test.cpp jonathan@grindserv:~$ ./a.out 1 Move 2 Move Copy 3 Move Copy Copy