http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48038
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-03-09 10:24:42 UTC --- slightly reduced ... #include <vector> #include <iostream> #include<algorithm> typedef std::vector<double> VI; struct V { VI v; V(){std::cout <<"dc" << std::endl;} ~V(){std::cout <<"dd " << v.size()<< std::endl;} V(V const & rh) : v(rh.v) { std::cout <<"cc" << std::endl; } V(size_t n, double d) : v(n,d){} V & operator=(V const &rh) { std::cout <<"ac" << std::endl; V tmp(rh); v.swap(tmp.v); return *this; } V(V && rh) : v(std::move(rh.v)) { std::cout <<"rc" << std::endl; } V & operator=(V && rh) { std::cout <<"ar" << std::endl; v = std::move(rh.v); return *this; } }; inline bool operator<(V lh, V rh) { return lh.v.at(0) < rh.v.at(0); } int main() { std::vector<V> vvs; vvs.push_back(V(1, 0.)); vvs.push_back(V(1, 1.)); vvs.insert(vvs.begin(),V(1, 2.)); std::stable_sort(vvs.begin(), vvs.end()); }