https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86565
Bug ID: 86565 Summary: failing to instantiate all of a local class Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: zhonghao at pku dot org.cn Target Milestone: --- The code is as follow: template<typename T> void f() { struct S { void g(int n = T::error) noexcept(T::error); }; } template void f<int>(); g++ accepts it, but clang++ rejects it: code0.cpp:2:28: error: type 'int' cannot be used prior to '::' because it has no members struct S { void g(int n = T::error) noexcept(T::error); }; ^ code0.cpp:2:9: note: in instantiation of member class 'S' requested here struct S { void g(int n = T::error) noexcept(T::error); }; ^ code0.cpp:4:15: note: in instantiation of function template specialization 'f<int>' requested here template void f<int>(); ^ code0.cpp:2:47: error: type 'int' cannot be used prior to '::' because it has no members struct S { void g(int n = T::error) noexcept(T::error); }; ^ 2 errors generated. g++ should reject this, because instantiating a function is supposed to instantiate everything within the function, even pieces of a local class. (Incidentally, failing to do this can lead to the "decl not instantiated in this scope" assertion.)