1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 namespace A { // expected-note 2 {{previous definition is here}} 6 int A; 7 void f() { A = 0; } 8 } 9 10 void f() { A = 0; } // expected-error {{unexpected namespace name 'A': expected expression}} 11 int A; // expected-error {{redefinition of 'A' as different kind of symbol}} 12 class A; // expected-error {{redefinition of 'A' as different kind of symbol}} 13 14 class B {}; // expected-note {{previous definition is here}} 15 // expected-note@-1 {{candidate function (the implicit copy assignment operator) not viable}} 16 #if __cplusplus >= 201103L // C++11 or later 17 // expected-note@-3 {{candidate function (the implicit move assignment operator) not viable}} 18 #endif 19 20 void C(); // expected-note {{previous definition is here}} 21 namespace C {} // expected-error {{redefinition of 'C' as different kind of symbol}} 22 23 namespace D { 24 class D {}; 25 } 26 27 namespace S1 { 28 int x; 29 30 namespace S2 { 31 32 namespace S3 { 33 B x; 34 } 35 } 36 } 37 38 namespace S1 { 39 void f() { 40 x = 0; 41 } 42 43 namespace S2 { 44 45 namespace S3 { 46 void f() { 47 x = 0; // expected-error {{no viable overloaded '='}} 48 } 49 } 50 51 int y; 52 } 53 } 54 55 namespace S1 { 56 namespace S2 { 57 namespace S3 { 58 void f3() { 59 y = 0; 60 } 61 } 62 } 63 } 64 65 namespace B {} // expected-error {{redefinition of 'B' as different kind of symbol}} 66 67 68 namespace foo { 69 enum x { 70 Y 71 }; 72 } 73 74 static foo::x test1; // ok 75 76 static foo::X test2; // typo: expected-error {{no type named 'X' in}} 77 78 namespace PR6620 { 79 namespace numeric { 80 namespace op { 81 struct greater {}; 82 } 83 namespace { 84 extern op::greater const greater; 85 } 86 } 87 88 namespace numeric { 89 namespace { 90 op::greater const greater = op::greater(); 91 } 92 93 template<typename T, typename U> 94 int f(T& l, U& r) 95 { numeric::greater(l, r); } 96 97 } 98 } 99