Home | History | Annotate | Download | only in namespace.udecl
      1 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -verify %s
      2 // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
      3 // RUN: not %clang_cc1 -fsyntax-only -std=c++98 -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck --check-prefix=CXX98 %s
      4 // RUN: not %clang_cc1 -fsyntax-only -std=c++11 -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck --check-prefix=CXX11 %s
      5 // C++0x N2914.
      6 
      7 struct X {
      8   int i;
      9   static int a;
     10 };
     11 
     12 using X::i; // expected-error{{using declaration cannot refer to class member}}
     13 using X::s; // expected-error{{using declaration cannot refer to class member}}
     14 
     15 void f() {
     16   using X::i; // expected-error{{using declaration cannot refer to class member}}
     17   using X::s; // expected-error{{using declaration cannot refer to class member}}
     18 }
     19 
     20 template <typename T>
     21 struct PR21933 : T {
     22   static void StaticFun() { using T::member; } // expected-error{{using declaration cannot refer to class member}}
     23 };
     24 
     25 struct S {
     26   static int n;
     27   struct Q {};
     28   enum E {};
     29   typedef Q T;
     30   void f();
     31   static void g();
     32 };
     33 
     34 using S::n; // expected-error{{class member}} expected-note {{use a reference instead}}
     35 #if __cplusplus < 201103L
     36 // CXX98-NOT: fix-it:"{{.*}}":{[[@LINE-2]]
     37 #else
     38 // CXX11: fix-it:"{{.*}}":{[[@LINE-4]]:1-[[@LINE-4]]:6}:"auto &n = "
     39 #endif
     40 
     41 using S::Q; // expected-error{{class member}}
     42 #if __cplusplus < 201103L
     43 // expected-note@-2 {{use a typedef declaration instead}}
     44 // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:1-[[@LINE-3]]:6}:"typedef"
     45 // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:11-[[@LINE-4]]:11}:" Q"
     46 #else
     47 // expected-note@-6 {{use an alias declaration instead}}
     48 // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:7-[[@LINE-7]]:7}:"Q = "
     49 #endif
     50 
     51 using S::E; // expected-error{{class member}}
     52 #if __cplusplus < 201103L
     53 // expected-note@-2 {{use a typedef declaration instead}}
     54 // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:1-[[@LINE-3]]:6}:"typedef"
     55 // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:11-[[@LINE-4]]:11}:" E"
     56 #else
     57 // expected-note@-6 {{use an alias declaration instead}}
     58 // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:7-[[@LINE-7]]:7}:"E = "
     59 #endif
     60 
     61 using S::T; // expected-error{{class member}}
     62 #if __cplusplus < 201103L
     63 // expected-note@-2 {{use a typedef declaration instead}}
     64 // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:1-[[@LINE-3]]:6}:"typedef"
     65 // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:11-[[@LINE-4]]:11}:" T"
     66 #else
     67 // expected-note@-6 {{use an alias declaration instead}}
     68 // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:7-[[@LINE-7]]:7}:"T = "
     69 #endif
     70 
     71 using S::f; // expected-error{{class member}}
     72 using S::g; // expected-error{{class member}}
     73 
     74 void h() {
     75   using S::n; // expected-error{{class member}} expected-note {{use a reference instead}}
     76 #if __cplusplus < 201103L
     77   // CXX98-NOT: fix-it:"{{.*}}":{[[@LINE-2]]
     78 #else
     79   // CXX11: fix-it:"{{.*}}":{[[@LINE-4]]:3-[[@LINE-4]]:8}:"auto &n = "
     80 #endif
     81 
     82   using S::Q; // expected-error{{class member}}
     83 #if __cplusplus < 201103L
     84   // expected-note@-2 {{use a typedef declaration instead}}
     85   // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:3-[[@LINE-3]]:8}:"typedef"
     86   // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:13-[[@LINE-4]]:13}:" Q"
     87 #else
     88   // expected-note@-6 {{use an alias declaration instead}}
     89   // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:9-[[@LINE-7]]:9}:"Q = "
     90 #endif
     91 
     92   using S::E; // expected-error{{class member}}
     93 #if __cplusplus < 201103L
     94   // expected-note@-2 {{use a typedef declaration instead}}
     95   // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:3-[[@LINE-3]]:8}:"typedef"
     96   // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:13-[[@LINE-4]]:13}:" E"
     97 #else
     98   // expected-note@-6 {{use an alias declaration instead}}
     99   // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:9-[[@LINE-7]]:9}:"E = "
    100 #endif
    101 
    102   using S::T; // expected-error{{class member}}
    103 #if __cplusplus < 201103L
    104   // expected-note@-2 {{use a typedef declaration instead}}
    105   // CXX98: fix-it:"{{.*}}":{[[@LINE-3]]:3-[[@LINE-3]]:8}:"typedef"
    106   // CXX98: fix-it:"{{.*}}":{[[@LINE-4]]:13-[[@LINE-4]]:13}:" T"
    107 #else
    108   // expected-note@-6 {{use an alias declaration instead}}
    109   // CXX11: fix-it:"{{.*}}":{[[@LINE-7]]:9-[[@LINE-7]]:9}:"T = "
    110 #endif
    111 
    112   using S::f; // expected-error{{class member}}
    113   using S::g; // expected-error{{class member}}
    114 }
    115