https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82980
Bug ID: 82980 Summary: Regression in determination of current instantiation (invalid requirement of template keyword) Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- Consider this example (reduced from SO: https://stackoverflow.com/q/47261553/2069064) template <class T> struct Outer { template <class U> void f(); void bar(Outer outer) { [outer](){ outer.f<int>(); }; // error } }; int main() { } outer is an instance of the current instantiation, so outer.f isn't type dependent, so the template keyword shouldn't be required. However, gcc 7 and later diagnose: prog.cc: In lambda function: prog.cc:8:28: error: expected primary-expression before 'int' [outer](){ outer.f<int>(); }; ^~~ prog.cc:8:28: error: expected ';' before 'int' gcc 6.3 and earlier accept, as does clang.