| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail94.d(28): Error: cannot implicitly override base class method `fail94.A.clone` with `fail94.B.clone`; add `override` attribute |
| --- |
| */ |
| interface I |
| { |
| int foo(); |
| } |
| |
| class IA : I |
| { |
| int foo() { return 1; } |
| } |
| |
| class A |
| { |
| I i; |
| |
| I clone() { return i; } |
| } |
| |
| class B : A |
| { |
| IA ia; |
| |
| IA clone() |
| out (result) |
| { |
| printf("B.clone()\n"); |
| } |
| body { return ia; } |
| } |
| |
| void main() |
| { |
| IA ia = new IA; |
| assert(ia.foo() == 1); |
| |
| I i = ia; |
| assert(i.foo() == 1); |
| |
| A a = new A; |
| a.i = i; |
| assert(a.clone().foo() == 1); |
| |
| B b = new B; |
| b.ia = ia; |
| assert(b.clone().foo() == 1); |
| |
| a = b; |
| assert(a.clone().foo() == 1); |
| |
| bar(&b.clone); |
| } |
| |
| |
| void bar(IA delegate() dg) |
| { |
| } |
| |