]>
Commit | Line | Data |
---|---|---|
b4c522fa | 1 | // REQUIRED_ARGS: -de |
5fee5ec3 | 2 | // EXTRA_FILES: imports/protectionimp.d |
b4c522fa IB |
3 | import imports.protectionimp; |
4 | ||
5 | alias TypeTuple(T...) = T; | |
6 | ||
7 | private | |
8 | { | |
9 | void localF() {} | |
10 | class localC {} | |
11 | struct localS {} | |
12 | union localU {} | |
13 | interface localI {} | |
14 | enum localE { foo } | |
15 | mixin template localMT() {} | |
16 | ||
17 | class localTC(T) {} | |
18 | struct localTS(T) {} | |
19 | union localTU(T) {} | |
20 | interface localTI(T) {} | |
21 | void localTF(T)() {} | |
22 | } | |
23 | ||
24 | void main() | |
25 | { | |
26 | // Private non-template declarations | |
27 | static assert(!__traits(compiles, privF())); | |
28 | static assert(!__traits(compiles, privC)); | |
29 | static assert(!__traits(compiles, privS)); | |
30 | static assert(!__traits(compiles, privU)); | |
31 | static assert(!__traits(compiles, privI)); | |
32 | static assert(!__traits(compiles, privE)); | |
33 | static assert(!__traits(compiles, privMT)); | |
34 | ||
35 | // Private local non-template declarations. | |
36 | static assert( __traits(compiles, localF())); | |
37 | static assert( __traits(compiles, localC)); | |
38 | static assert( __traits(compiles, localS)); | |
39 | static assert( __traits(compiles, localU)); | |
40 | static assert( __traits(compiles, localI)); | |
41 | static assert( __traits(compiles, localE)); | |
42 | static assert( __traits(compiles, localMT)); | |
43 | ||
44 | // Private template declarations. | |
45 | static assert(!__traits(compiles, privTF!int())); | |
46 | static assert(!__traits(compiles, privTC!int)); | |
47 | static assert(!__traits(compiles, privTS!int)); | |
48 | static assert(!__traits(compiles, privTU!int)); | |
49 | static assert(!__traits(compiles, privTI!int)); | |
50 | ||
51 | // Private local template declarations. | |
52 | static assert( __traits(compiles, localTF!int())); | |
53 | static assert( __traits(compiles, localTC!int)); | |
54 | static assert( __traits(compiles, localTS!int)); | |
55 | static assert( __traits(compiles, localTU!int)); | |
56 | static assert( __traits(compiles, localTI!int)); | |
57 | ||
58 | // Public template function with private type parameters. | |
59 | static assert(!__traits(compiles, publF!privC())); | |
60 | static assert(!__traits(compiles, publF!privS())); | |
61 | static assert(!__traits(compiles, publF!privU())); | |
62 | static assert(!__traits(compiles, publF!privI())); | |
63 | static assert(!__traits(compiles, publF!privE())); | |
64 | ||
65 | // Public template function with private alias parameters. | |
66 | static assert(!__traits(compiles, publFA!privC())); | |
67 | static assert(!__traits(compiles, publFA!privS())); | |
68 | static assert(!__traits(compiles, publFA!privU())); | |
69 | static assert(!__traits(compiles, publFA!privI())); | |
70 | static assert(!__traits(compiles, publFA!privE())); | |
71 | ||
72 | // Private alias. | |
73 | static assert(!__traits(compiles, privA)); | |
74 | ||
75 | // Public template mixin. | |
76 | static assert( __traits(compiles, publMT)); | |
77 | } | |
78 | ||
79 | /***************************************************/ | |
5fee5ec3 | 80 | // https://issues.dlang.org/show_bug.cgi?id=14169 |
b4c522fa IB |
81 | |
82 | template staticMap14169(alias fun, T...) | |
83 | { | |
84 | static if (T.length > 0) | |
85 | alias staticMap14169 = TypeTuple!(fun!(T[0]), staticMap14169!(fun, T[1..$])); | |
86 | else | |
87 | alias staticMap14169 = TypeTuple!(); | |
88 | } | |
89 | ||
90 | class C14169 | |
91 | { | |
92 | private struct InnerStruct(string NameS) | |
93 | { | |
94 | alias Name = NameS; | |
95 | } | |
96 | alias DimensionNames = staticMap14169!(GetName14169, InnerStruct!"A"); | |
97 | } |