| |
| import core.stdc.stdio; |
| |
| /*******************************************/ |
| |
| interface IStream |
| { |
| int read(); |
| } |
| |
| interface OStream |
| { |
| int write(); |
| } |
| |
| class IO : IStream, OStream |
| { |
| int read() { return 7; } |
| int write() { return 267; } |
| } |
| |
| void foo(IStream i, OStream o) |
| { |
| printf("foo(i = %p, o = %p)\n", i, o); |
| assert(i.read() == 7); |
| assert(o.write() == 267); |
| } |
| |
| void test1() |
| { |
| IO io = new IO(); |
| printf("io = %p\n", io); |
| foo(io, io); |
| delete io; |
| } |
| |
| /*******************************************/ |
| |
| interface I { } |
| class C : I |
| { |
| ~this() { printf("~C()\n"); } |
| } |
| |
| void test2() |
| { |
| I i = new C(); |
| delete i; |
| |
| { |
| scope I j = new C(); |
| } |
| } |
| |
| /*******************************************/ |
| |
| interface I3 { |
| void h(); |
| } |
| interface K3 { |
| void f(); |
| } |
| |
| interface J3 : I3, K3 {} |
| |
| class A3 : J3 { |
| short x = 3; |
| |
| void f(){ assert(x == 3); } |
| void h(){ assert(x == 3); } |
| } |
| |
| void test3() |
| { |
| auto a = new A3(); |
| a.f(); |
| a.h(); |
| J3 j = a; |
| j.f(); |
| K3 k = a; |
| k.f(); |
| assert(&j.f == &k.f); // Bugzilla 3706 |
| } |
| |
| /*******************************************/ |
| |
| int main() |
| { |
| test1(); |
| test2(); |
| test3(); |
| |
| printf("Success\n"); |
| return 0; |
| } |