https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110690
Bug ID: 110690 Summary: invalid use of member 'S::m' in static member function Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: irip at qq dot com Target Milestone: --- Test Code: struct S { int m; static void f_sizeof() { (void) sizeof(m); } static void f_typeid() { (void) typeid(decltype(m)); } struct N { int m; static void f_sizeof() { (void) sizeof(m); } static void f_typeid() { (void) typeid(decltype(m)); } }; template <class T> class C { public: int m; static void f_sizeof() { (void) sizeof(m); } static void f_typeid() { (void) typeid(decltype(m)); } }; } s; static void f_typeid() { (void) typeid(m); } Compiler error:invalid use of member 'S::m' in static member function The reason is that typeid's operand may or may not be an unevaluated operand, so it is not known which one it is at parsing time