Looks like most of the difference can be accounted for by the fact that A
is not default constructible - which probably causes some more complicated
code in the standard library which the compiler isn't currently able to see
through. I haven't looked at the specifics of what that might be:
$ cat v
Hi,
When I compile the attached code, I find that one instantiation of
vector::_M_fill_insert is double the size of the other even though the
semantics should be the same:
$ clang++ -O3 -g -c insert.cpp
$ nm insert.o --size-sort -Ctd
0079 W std::vector > f()
0079 W st