http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51626
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-19 18:57:45 UTC --- I agree with the sentiment, but unfortunately a C++11 allocator isn't required to provide a construct member at all. 17.6.3.5 p5 shows a minimal C++11 allocator, and that won't work either, so 4.6 doesn't correctly support user-defined C++98 allocators or user-defined C++11 allocators! I think the minimal fix is for __uninitialized_default_n_a and __uninitialized_default_a to default construct an object of the iterator's value_type and pass that to __alloc.construct(addressof(*cur)) A less-minimal fix would be to change all the containers to use __uninitialized_fill_a instead of __uninitialized_default_a