https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89906
Bug ID: 89906 Summary: [8 Regression] template template parameter redeclared Product: gcc Version: 8.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: romain.geissler at amadeus dot com Target Milestone: --- Hi, The following snippet started to be rejected between: g++ (GCC) 8.3.1 20190225 and g++ (GCC) 8.3.1 20190331 , only when using -std=gnu++17). Clang 8 happily compiles it. > cat reproducer.cpp template <template <typename T> class Tmpl> struct TemplateSel {}; template <template <typename T> class T1> struct Templates1 { typedef TemplateSel<T1> Head; }; template <template <typename T1, typename T2, typename T3> class F> struct quote3; template <template <typename P1, typename P2, typename P3> class F> struct quote3 {}; > /opt/1A/toolchain/x86_64-2.6.32-v4.0.55/bin/g++ -std=gnu++17 -o reproducer > -c reproducer.cpp reproducer.cpp:8:66: error: template parameter ‘template<class T1, class T2, class T3> class F’ template <template <typename T1, typename T2, typename T3> class F> struct quote3; ^ reproducer.cpp:10:76: error: redeclared here as ‘template<class P1, class P2, class P3> class F’ template <template <typename P1, typename P2, typename P3> class F> struct quote3 {}; ^~~~~~ Cheers, Romain