https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108773
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Even better don't make second initializer_list member __rebind: namespace std { struct __new_allocator {}; template <typename> using __allocator_base = __new_allocator; struct allocator : __allocator_base<int> {}; template <class> struct initializer_list { void *_M_array; decltype(sizeof 0) _M_len; }; template <typename T> struct basic_string { basic_string(const T *, allocator = allocator()); ~basic_string(); }; using string = basic_string<char>; template <typename T> struct array { T _M_elems; }; template <typename T> struct list { list &operator=(initializer_list<T>); }; } struct RGWSyncTraceManager { std::list<std::array<std::string>> admin_commands; void hook_to_admin_command(); }; void RGWSyncTraceManager::hook_to_admin_command() { admin_commands = {{""}, {""}}; }