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

Reply via email to