https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79394
Bug ID: 79394 Summary: Possible rejects-valid problem Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mpolacek at gcc dot gnu.org Target Milestone: --- class A { int m_class; }; template <class> class B : A { void m_fn1(); }; template <class T> void B<T>::m_fn1() { foo (this->m_class); } isn't compiled anymore since r236221. clang++ accepts the code. g++ says p.cc: In member function ‘void B< <template-parameter-1-1> >::m_fn1()’: p.cc:5:41: error: there are no arguments to ‘foo’ that depend on a template parameter, so a declaration of ‘foo’ must be available [-fpermissive] template <class T> void B<T>::m_fn1() { foo (this->m_class); } ^~~ p.cc:5:41: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated) It is likely that the code is actually invalid, in which case we should document this in porting_to.html and close this PR.