https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72752
Bug ID: 72752 Summary: internal compiler error: in retrieve_specialization Product: gcc Version: 6.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mikeus at hotmail dot ru Target Milestone: --- The following code generates an ice: ----- 8< ---------- 8< ---------- 8< ----- typedef void (*foo_t)(); void test(foo_t) {} template< typename > struct A { template< typename = void > static void foo(); void bar() { test(foo); } template< typename > void baz() { test(foo); } }; template< typename _T_ > template< typename > void A< _T_ >::foo() {} ----- >8 ---------- >8 ---------- >8 ----- Version 5.3.0 compiles the above code successfully. This is possibly related with bug #66564. The following code generates an ice for both versions: ----- 8< ---------- 8< ---------- 8< ----- template< typename > struct Outer { template< typename > struct Inner; }; template<> template< typename _T_ > class Outer< _T_ >::Inner< _T_ > {}; template struct Outer< int >::Inner< int >; ----- >8 ---------- >8 ---------- >8 -----