This should compile, it does with 3.3.2 but not with 3.4.0 and 4.0.0 template<class T1,int N1> class Class { public: template <class T2,int N2> void function( const Class<T2,N2>& ); };
template<> template<class T2,int N2> void Class<int,1>::function( const Class<T2,N2>& param ) { param;// line 12 } int main() { Class<int,1> instance; Class<char,2> param; instance.function( param ); } This is a regression from the begining of this year: : Search converges between 2004-03-01-trunk (#446) and 2004-04-01-trunk (#447). : Search converges between 2004-03-15-3.4 (#3) and 2004-04-01-3.4 (#4). -- Summary: [3.4/4.0 Regression] specialization of template class with inner template members and paramater Product: gcc Version: 4.0.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pinskia at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18962