http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56437
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-02-25 00:11:16 UTC --- C++11 allocators are not required to define any of these: typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef unsigned size_type; typedef int difference_type; template <class U> struct rebind { typedef MyAllocator<U> other; }; But if your allocator fails to define any of them then std::string (and some of the other containers) will fail to compile. This is a known issue.