https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113814
Bug ID: 113814 Summary: [modules] ICE with imported partial specialization matching existing template-id Product: gcc Version: 14.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: --- Reduced from the hello-1 ICE tracked by PR113710: $ cat header.h template<int __i, typename _Tp> struct tuple_element; template<typename...> struct tuple { }; template<int __i, typename... _Elements> tuple_element<__i, tuple<_Elements...>> get(tuple<_Elements...>); $ cat testcase.H #include "header.h" template<int __i, typename... _Elements> struct tuple_element<__i, tuple<_Elements...>> { }; $ cat testcase.C #include "header.h" import "testcase.H" int main() { get<0>(tuple<int, int>{}); } $ g++ -fmodules-ts testcase.H testcase.C testcase.C: In function ‘int main()’: testcase.C:5:3: internal compiler error: canonical types differ for identical types ‘tuple_element<__i, tuple<_Elements ...> >’ and ‘tuple_element<__i, tuple<_Elements ...> >’ 5 | get<0>(tuple<int, int>{}); | ^~~