https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94799
Bug ID: 94799 Summary: [7.2+ Regression] Calling a member template function fails Product: gcc Version: 9.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ojman101 at protonmail dot com Target Milestone: --- >From gcc version 7.2 and upwards this c++ code, using a member template function look-up, fails to compile: template <typename T> struct A { int a() { return 42; } }; template <typename T> struct B { int b(A<T> *p) { return p->template A<T>::a(); } }; int main() { A<int> a; B<int> b; return b.b(&a); } On gcc version 9.3.0 (Gentoo 9.3.0 p2), this output is generated: main.cc: In member function 'int B<T>::b(A<T>*)': main.cc:11:32: error: expected ';' before '::' token 11 | return p->template A<T>::a(); | ^~ | ; main.cc:11:34: error: '::a' has not been declared 11 | return p->template A<T>::a(); | ^ main.cc: In instantiation of 'int B<T>::b(A<T>*) [with T = int]': main.cc:18:18: required from here main.cc:11:28: error: 'A' is not a member template function 11 | return p->template A<T>::a(); | ~~~~~~~~~~~~^~~~ This code successfully compiles on new versions of clang, icc and msvc as well as gcc versions before 7.2.