https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82758
Bug ID: 82758 Summary: Allocators declared `final` are not acceptible by containers Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: wmx16835 at 126 dot com Target Milestone: --- I found that any allocator type declared `final` are not acceptable by the implementation of the containers that require allocators, including `vector`, `deque`, `list`, `forward_list`, `set`, `map`, `multiset`, `multimap`, `unordered_set`, `unordered_map`, `unordered_multiset`, `unordered_multimap`. For example, providing there is a user-defined allocator type: template <class T> class MyAllocator final : public std::allocator<T> { public: template <class U> struct rebind { using other = MyAllocator<U>; }; }; Each line of the following expressions shall be well-formed. However, they do not compile. std::vector<int, MyAllocator<int>> v{}; std::deque<int, MyAllocator<int>> d{}; std::list<int, MyAllocator<int>> l{}; std::forward_list<int, MyAllocator<int>> f_l{}; std::set<int, std::less<int>, MyAllocator<int>> s{}; std::map<int, int, std::less<int>, MyAllocator<std::pair<int, int>>> mp{}; std::multiset<int, std::less<int>, MyAllocator<int>> m_s{}; std::multimap<int, int, std::less<int>, MyAllocator<std::pair<int, int>>> m_mp{}; std::unordered_set<int, std::hash<int>, std::equal_to<int>, MyAllocator<int>> u_s{}; std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, MyAllocator<std::pair<const int, int>>> u_mp{}; std::unordered_multiset<int, std::hash<int>, std::equal_to<int>, MyAllocator<int>> u_m_s {}; std::unordered_multimap<int, int, std::hash<int>, std::equal_to<int>, MyAllocator<std::pair<const int, int>>> u_m_mp{};