As chris points out, this is a duplicate of this question. However I did not see in the answers to that question the following:
#include <vector>
#include <iostream>
struct X
{
X() {std::cout << "X()\n";}
X(const X&) {std::cout << "X(const X&)\n";}
};
int
main()
{
std::vector<X> v(3);
}
In C++03 this outputs:
X()
X(const X&)
X(const X&)
X(const X&)
In C++11 this outputs:
X()
X()
X()
For almost all code, this makes no difference. However "almost" is not "always", so this is a breaking (behavioral difference) change. You can blame me personally for this change. Without it:
std::vector<std::unique_ptr<int>> v(3);
would not have compiled. And I considered this case sufficiently motivating for the breakage.