-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaziz.d
50 lines (39 loc) · 843 Bytes
/
aziz.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//immutable(int delegate()) dg;
//pragma(msg, typeof(cast()dg));
//pragma(msg, is(int delegate(): int delegate()const));
template ID(alias T){ alias T ID; }
template GetParent(T){
alias ID!(mixin((()=>(new T).foo())())) GetParent;
}
class B{ auto foo(){ return "A"; }}
class A: GetParent!A{
override foo(){ return "B"; }
}
/+
mixin("int a;");
class A{
int a;
this(){
a = 10;
}
}
enum x = (()=>(new A()).a)();
pragma(msg, x);+/
/+
template ID(alias T){ alias T ID; }
template GetParent(T){
alias ID!(mixin((()=>(new T).foo())())) GetParent;
}
class B{ auto foo(){ return "A"; }}
class A: GetParent!C{
override foo(){ return "C"; }
}
class C: GetParent!B{
override foo(){ return "B"; }
}
class D: GetParent!A{
override foo(){ return "D"; }
}
static assert(is(A:B) && is(C:A) && is(D:C));
alias immutable(char)[] string;
+/