Home | History | Annotate | Download | only in expr.prim.general
      1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
      2 
      3 struct S {
      4   int *j = &nonexistent; // expected-error {{use of undeclared identifier 'nonexistent'}}
      5   int *m = &n; // ok
      6 
      7   int n = f(); // ok
      8   int f();
      9 };
     10 
     11 int i = sizeof(S::m); // ok
     12 int j = sizeof(S::m + 42); // ok
     13 
     14 
     15 struct T {
     16   int n;
     17   static void f() {
     18     int a[n]; // expected-error {{invalid use of member 'n' in static member function}}
     19     int b[sizeof n]; // ok
     20   }
     21 };
     22 
     23 // Make sure the rule for unevaluated operands works correctly with typeid.
     24 namespace std {
     25   class type_info;
     26 }
     27 class Poly { virtual ~Poly(); };
     28 const std::type_info& k = typeid(S::m);
     29 const std::type_info& m = typeid(*(Poly*)S::m); // expected-error {{invalid use of non-static data member}}
     30 const std::type_info& n = typeid(*(Poly*)(0*sizeof S::m));
     31 
     32 namespace PR11956 {
     33   struct X { char a; };
     34   struct Y { int f() { return sizeof(X::a); } }; // ok
     35 
     36   struct A { enum E {} E; };
     37   struct B { int f() { return sizeof(A::E); } }; // ok
     38 }
     39