3 /***************** Covariance ******************/
13 override void foo(); // no error
14 override void bar() @nogc; // no error
17 /******************************************/
20 static assert(__traits(compiles
, new Object()));
22 void foo_compiles() {}
24 @nogc void test_compiles()
26 auto fp
= &foo_compiles
;
27 static assert(!__traits(compiles
, foo_compiles()));
28 static assert(!__traits(compiles
, fp()));
29 static assert(!__traits(compiles
, (*fp
)()));
31 static assert(!__traits(compiles
, [1,2,3]));
32 static assert(!__traits(compiles
, [1:1, 2:2]));
35 static assert(!__traits(compiles
, new int));
36 static assert(!__traits(compiles
, new Struct()));
37 static assert(!__traits(compiles
, new Object()));
40 static assert(!__traits(compiles
, delete p
));
43 static assert( __traits(compiles
, aa
[0]));
44 static assert(!__traits(compiles
, (aa
[0] = 10)));
47 static assert(!__traits(compiles
, a
.length
= 1));
48 static assert(!__traits(compiles
, a
.length
+= 1));
49 static assert(!__traits(compiles
, a
.length
-= 1));
51 static assert(!__traits(compiles
, a
~= 1));
52 static assert(!__traits(compiles
, a
~ a
));
55 /******************************************/
56 // https://issues.dlang.org/show_bug.cgi?id=12630
58 void test12630() @nogc
60 // All of these declarations should cause no errors.
62 static const ex1
= new Exception("invalid");
63 //enum ex2 = new Exception("invalid");
65 static const arr1
= [[1,2], [3, 4]];
66 enum arr2
= [[1,2], [3, 4]];
68 //static const aa1 = [1:1, 2:2];
69 enum aa2
= [1:1, 2:2];
71 //static const v1 = aa1[1];
75 //static const del1 = (delete o).sizeof;
76 //enum del2 = (delete o).sizeof;
79 static const len1
= (a
.length
= 1).sizeof
;
80 enum len2
= (a
.length
= 1).sizeof
;
82 static const cata1
= (a
~= 1).sizeof
;
83 enum cata2
= (a
~= 1).sizeof
;
85 static const cat1
= (a
~ a
).sizeof
;
86 enum cat2
= (a
~ a
).sizeof
;
89 /******************************************/
90 // https://issues.dlang.org/show_bug.cgi?id=12642
92 static if (is(__vector(ulong[2])))
96 ulong2
test12642() @nogc
102 /******************************************/
103 // https://issues.dlang.org/show_bug.cgi?id=13550
105 auto foo13550() @nogc
114 // https://issues.dlang.org/show_bug.cgi?id=19285
116 void f(bool cond
, string s
) @nogc {
117 auto inner() { return s
; }
118 alias Unused1
= typeof(inner
); // OK
119 alias Unused2
= typeof(&inner
); // (Does not) INFERS GC (anymore)
120 enum Unused3
= __traits(compiles
, &inner
);
123 // https://issues.dlang.org/show_bug.cgi?id=24072
125 version (D_SIMD
) void f24072() @nogc
127 alias int4
= __vector(int[4]);
128 int4 b
= cast(int4
)[1, 2, 3, 4];
129 int4 c
= cast(int4
)[1, 2];