https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101174
Bug ID: 101174 Summary: [12 Regression] CTAD causes instantiation of invalid specialization Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ppalka at gcc dot gnu.org Target Milestone: --- The following testcase struct S { using type = int; }; template<class T = int, class U = S> struct multiset { using type = typename U::type; multiset(T); multiset(U); }; template<class T> multiset(T) -> multiset<T>; multiset c(42); is rejected by GCC 12 with <stdin>: In instantiation of ‘struct multiset<int, int>’: <stdin>:13:14: required from here <stdin>:5:9: error: ‘int’ is not a class, struct, or union type <stdin>:7:3: error: ‘multiset<T, U>::multiset(U) [with T = int; U = int]’ cannot be overloaded with ‘multiset<T, U>::multiset(T) [with T = int; U = int]’ <stdin>:6:3: note: previous declaration ‘multiset<T, U>::multiset(T) [with T = int; U = int]’