]>
Commit | Line | Data |
---|---|---|
1821f97b | 1 | // EXTRA_CPP_SOURCES: externmangle2.cpp |
5fee5ec3 | 2 | // DISABLED: win |
b4c522fa | 3 | |
5fee5ec3 IB |
4 | extern(C++): |
5 | ||
6 | struct Test32NS1 | |
b4c522fa | 7 | { |
5fee5ec3 | 8 | struct Foo(X) |
b4c522fa | 9 | { |
5fee5ec3 | 10 | X *v; |
b4c522fa | 11 | } |
b4c522fa IB |
12 | |
13 | ||
5fee5ec3 IB |
14 | struct Bar(X) |
15 | { | |
16 | X *v; | |
17 | } | |
b4c522fa | 18 | |
5fee5ec3 | 19 | }; |
b4c522fa | 20 | |
5fee5ec3 IB |
21 | struct Test32NS2 |
22 | { | |
23 | struct Foo(X) | |
b4c522fa | 24 | { |
5fee5ec3 IB |
25 | X *v; |
26 | } | |
27 | }; | |
b4c522fa | 28 | |
5fee5ec3 IB |
29 | struct Test32(alias Y, alias Z) |
30 | { | |
31 | Y!(int)* field; | |
32 | }; | |
b4c522fa IB |
33 | |
34 | ||
5fee5ec3 IB |
35 | void test32a(Test32!(Test32NS1.Foo, Test32NS1.Foo) arg); |
36 | void test32b(Test32!(Test32NS1.Foo, Test32NS1.Bar) arg); | |
37 | void test32c(Test32!(Test32NS1.Foo, Test32NS2.Foo) arg); | |
38 | void test32d(Test32!(Test32NS1.Foo, Test32NS2.Foo) arg1, Test32!(Test32NS2.Foo, Test32NS1.Foo) arg2); | |
b4c522fa | 39 | |
5fee5ec3 IB |
40 | interface XXX |
41 | { | |
42 | } | |
b4c522fa | 43 | |
5fee5ec3 | 44 | void test33a(XXX, XXX*); |
b4c522fa IB |
45 | |
46 | ||
5fee5ec3 IB |
47 | struct Test33(alias A, alias B) |
48 | { | |
49 | } | |
b4c522fa | 50 | |
5fee5ec3 IB |
51 | /* |
52 | void test33(XXX, Test33!(test33a, test33a) arg, XXX); | |
b4c522fa IB |
53 | |
54 | ||
5fee5ec3 IB |
55 | struct Test34(alias A) |
56 | { | |
57 | }; | |
b4c522fa | 58 | |
5fee5ec3 IB |
59 | struct Test34A |
60 | { | |
61 | static void foo(int); | |
62 | }; | |
b4c522fa IB |
63 | |
64 | ||
5fee5ec3 IB |
65 | void test34(Test34!(Test34A.foo) arg); |
66 | */ | |
b4c522fa | 67 | |
5fee5ec3 | 68 | __gshared extern int test36; |
b4c522fa | 69 | |
5fee5ec3 IB |
70 | /* |
71 | struct Test37(alias A) | |
72 | { | |
73 | }; | |
b4c522fa | 74 | |
5fee5ec3 IB |
75 | struct Test37A |
76 | { | |
77 | __gshared extern int t38; | |
78 | }; | |
b4c522fa | 79 | |
5fee5ec3 IB |
80 | void test37(Test37!(test36) arg); |
81 | void test38(Test37!(Test37A.t38) arg); | |
82 | */ | |
b4c522fa | 83 | |
5fee5ec3 IB |
84 | struct Test39 |
85 | { | |
86 | struct T39A(X) | |
b4c522fa | 87 | { |
b4c522fa | 88 | } |
5fee5ec3 | 89 | } |
b4c522fa | 90 | |
5fee5ec3 IB |
91 | struct T39A |
92 | { | |
93 | } | |
b4c522fa | 94 | |
5fee5ec3 | 95 | void test39(Test39.T39A!(.T39A)); |
b4c522fa | 96 | |
5fee5ec3 IB |
97 | version(none) |
98 | { | |
99 | version(Posix) //Only for g++ with -std=c++0x and Visual Studio 2013+ | |
b4c522fa | 100 | { |
b4c522fa | 101 | |
5fee5ec3 IB |
102 | struct Test40(T, V...) |
103 | { | |
b4c522fa | 104 | |
b4c522fa | 105 | } |
5fee5ec3 IB |
106 | |
107 | void test40(Test40!(int, double, void)) | |
b4c522fa | 108 | { |
5fee5ec3 IB |
109 | } |
110 | } | |
111 | else version(Win64) //Only for g++ with -std=c++0x and Visual Studio 2013+ | |
112 | { | |
b4c522fa | 113 | |
5fee5ec3 IB |
114 | struct Test40(T, V...) |
115 | { | |
b4c522fa | 116 | |
5fee5ec3 | 117 | } |
b4c522fa | 118 | |
5fee5ec3 IB |
119 | void test40(Test40!(int, double, void)) |
120 | { | |
b4c522fa IB |
121 | } |
122 | } | |
5fee5ec3 | 123 | } |
b4c522fa IB |
124 | |
125 | ||
5fee5ec3 IB |
126 | __gshared extern const XXX test41; |
127 | struct Test42 | |
128 | { | |
129 | __gshared extern const XXX test42; | |
130 | } | |
131 | __gshared extern int[4] test43; | |
132 | const(XXX) test44(); | |
b4c522fa | 133 | |
5fee5ec3 IB |
134 | void main() |
135 | { | |
136 | test32a(Test32!(Test32NS1.Foo, Test32NS1.Foo)()); | |
137 | test32b(Test32!(Test32NS1.Foo, Test32NS1.Bar)()); | |
138 | test32c(Test32!(Test32NS1.Foo, Test32NS2.Foo)()); | |
139 | test32d(Test32!(Test32NS1.Foo, Test32NS2.Foo)(), Test32!(Test32NS2.Foo, Test32NS1.Foo)()); | |
b4c522fa | 140 | |
5fee5ec3 IB |
141 | //test33a(null, null); |
142 | //test33(null, Test33!(test33a, test33a)(), null); | |
b4c522fa | 143 | |
5fee5ec3 | 144 | //test34(Test34!(Test34A.foo)()); |
b4c522fa | 145 | |
5fee5ec3 | 146 | assert(test36 == 36); |
b4c522fa | 147 | |
5fee5ec3 IB |
148 | //test37(Test37!(test36)()); |
149 | //test38(Test37!(Test37A.t38)()); | |
150 | test39(Test39.T39A!(.T39A)()); | |
b4c522fa | 151 | |
5fee5ec3 IB |
152 | assert(test41 is null); |
153 | assert(Test42.test42 is null); | |
154 | assert(test43 == [1, 2, 3, 4]); | |
155 | auto ptr = &test44; | |
b4c522fa | 156 | } |