Похоже, проблема в том, что у вашей версии g ++ нет полностью совместимой библиотеки C ++ 0x. В частности, в C ++ 03 конструктор размера std :: vector имеет следующую подпись:
// C++ 03
explicit vector(size_type n, const T& value = T(),
const Allocator& = Allocator());
С помощью этой сигнатуры функции и вашего вызова создается временный объект, затем он связывается с постоянной ссылкой, и его копии создаются для каждого из элементов.
в то время как в C ++ 0x есть разные конструкторы:
// C++0x
explicit vector(size_type n);
vector(size_type n, const T& value, const Allocator& = Allocator());
В этом случае ваш вызов будет соответствовать первой подписи, и элементы должны быть построены по умолчанию с размещением нового над контейнером (как @Howard Hinnant правильно указывает в своем ответе компилятор не должен вызывать конструктор перемещения вообще).
Вы можете попробовать проверить, есть ли в более свежих версиях g ++ обновленная стандартная библиотека, или обойти проблему, добавив элементы вручную:
std::vector<A> v;
v.reserve( 3 ); // avoid multiple relocations
while (v.size() < 3 ) v.push_back( A() );