1 /* PERMUTE_ARGS:
2  */
3 
4 class A
5 {
msg()6     @__future char msg() { return 'a'; }
7 }
8 
9 class B : A
10 {
msg()11     char msg() { return 'b'; }
12 }
13 
14 class C : B
15 {
msg()16     override char msg() { return 'c'; }
17 }
18 
19 class D : A
20 {
msg()21     override char msg() { return 'd'; }
22 }
23 
main()24 int main()
25 {
26     auto a = new A();
27     assert(a.msg() == 'a');
28     auto b = new B();
29     assert(b.msg() == 'b');
30     auto c = new C();
31     assert(c.msg() == 'c');
32     auto d = new D();
33     assert(d.msg() == 'd');
34 
35     assert(b.A.msg() == 'a');
36 
37     auto ba = cast(A)b;
38     assert(ba.msg() == 'a');
39 
40     auto da = cast(A)d;
41     assert(da.msg() == 'd');
42     return 0;
43 }
44