http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60921
Bug ID: 60921 Summary: 'final' allocators are incompatible with the Empty Base-class Optimisation Product: gcc Version: 4.10.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Depends on: 51365 +++ This bug was initially created as a clone of Bug #51365 +++ Deriving from allocators to use the EBO doesn't work if they are final: #include <future> #include <memory> template<typename T> struct final_allocator final : std::allocator<T> { final_allocator() = default; template<typename U> final_allocator(const final_allocator<U>&) { } template<typename U> struct rebind { typedef final_allocator<U> other; }; }; final_allocator<int> a; std::promise<int> p(std::allocator_arg, a); This affects the containers and most types in <future>. See Bug 51365 comment 6 for a partial fix.