https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102300
Bug ID: 102300 Summary: Qualified name in class template Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: huangqinjin at gmail dot com Target Milestone: --- template<typename T> struct holder { template<typename F> struct fn {}; struct t1 : fn<T> {}; // pass struct t2 : holder<T >::fn<T> {}; // fail struct t3 : holder<T >::template fn<T> {}; // fail struct t4 : holder<T*>::template fn<T> {}; // pass }; The code compiles with GCC 10 but not GCC 11. Output of x86-64 gcc 11.1 (Compiler #2) <source>:7:35: error: expected class-name before '{' token 7 | struct t2 : holder<T >::fn<T> {}; // fail | ^ <source>:8:44: error: expected class-name before '{' token 8 | struct t3 : holder<T >::template fn<T> {}; // fail | https://godbolt.org/z/qMav3YrYK