]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CXX/basic/basic.lookup/basic.lookup.unqual/p14.cpp
Vendor import of clang tags/RELEASE_33/final r183502 (effectively, 3.3
[FreeBSD/FreeBSD.git] / test / CXX / basic / basic.lookup / basic.lookup.unqual / p14.cpp
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // expected-no-diagnostics
3
4 // C++0x [basic.lookup.unqual]p14:
5 //   If a variable member of a namespace is defined outside of the
6 //   scope of its namespace then any name used in the definition of
7 //   the variable member (after the declarator-id) is looked up as if
8 //   the definition of the variable member occurred in its namespace.
9
10 namespace N { 
11   struct S {};
12   S i; 
13   extern S j;
14   extern S j2;
15
16
17 int i = 2; 
18 N::S N::j = i;
19 N::S N::j2(i);
20
21 // <rdar://problem/13317030>
22 namespace M {
23   class X { };
24   inline X operator-(int, X);
25
26   template<typename T>
27   class Y { };
28
29   typedef Y<float> YFloat;
30
31   namespace yfloat {
32     YFloat operator-(YFloat, YFloat);
33   }
34   using namespace yfloat;
35 }
36
37 using namespace M;
38
39 namespace M {
40
41 class Other {
42   void foo(YFloat a, YFloat b);
43 };
44
45 }
46
47 void Other::foo(YFloat a, YFloat b) {
48   YFloat c = a - b;
49 }
50
51 // <rdar://problem/13540899>
52 namespace Other {
53   void other_foo();
54 }
55
56 namespace M2 {
57   using namespace Other;
58
59   extern "C" {
60     namespace MInner {
61       extern "C" {
62         class Bar { 
63           void bar();
64         };
65       }
66     }
67   }
68 }
69
70 void M2::MInner::Bar::bar() {
71   other_foo();
72 }