https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119561
Bug ID: 119561 Summary: GCC hasn't completely forbidden user-declared specializations of std::initializer_list Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: de34 at live dot cn Target Milestone: --- Per [initializer.list.syn]/2 (https://eel.is/c++draft/initializer.list.syn#2) (added via LWG 2129 (https://cplusplus.github.io/LWG/issue2129)), the following code snippet is ill-formed (neither UB nor IFNDR) and thus should be rejected. (Although this is an LWG issue, compiler change is necessary.) ``` #include <initializer_list> template<class T> class std::initializer_list<T*> { private: void* m_array_; decltype(sizeof(0)) m_len_; }; ``` But currently GCC (/w libstdc++) silently accepts it (https://godbolt.org/z/q6TMo91Ef). GCC should either directly detect such specializations (like MSVC and EDG) or provide some more general mechanism like Clang's [[clang::no_specializations]].