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