1 // https://issues.dlang.org/show_bug.cgi?id=20178 2 3 interface I {} 4 interface J : I {} K(T)5interface K(T) {} 6 class C1 : I {} 7 class C2 : C1 {} 8 class C3 : J {} C4(T)9class C4(T) : C3, K!T {} 10 class C5(T) : C4!T {} 11 main()12void main() @nogc nothrow pure @safe 13 { 14 assert(typeid(C1).isBaseOf(typeid(C1))); 15 assert(typeid(C1).isBaseOf(typeid(C2))); 16 17 assert(!typeid(C2).isBaseOf(typeid(C1))); 18 assert(typeid(C2).isBaseOf(typeid(C2))); 19 20 assert(!typeid(C1).isBaseOf(typeid(Object))); 21 assert(!typeid(C2).isBaseOf(typeid(Object))); 22 assert(typeid(Object).isBaseOf(typeid(C1))); 23 assert(typeid(Object).isBaseOf(typeid(C2))); 24 25 assert(typeid(I).isBaseOf(typeid(I))); 26 assert(typeid(I).isBaseOf(typeid(J))); 27 assert(typeid(I).isBaseOf(typeid(C1))); 28 assert(typeid(I).isBaseOf(typeid(C2))); 29 assert(typeid(I).isBaseOf(typeid(C3))); 30 assert(!typeid(I).isBaseOf(typeid(Object))); 31 32 assert(!typeid(J).isBaseOf(typeid(I))); 33 assert(typeid(J).isBaseOf(typeid(J))); 34 assert(!typeid(J).isBaseOf(typeid(C1))); 35 assert(!typeid(J).isBaseOf(typeid(C2))); 36 assert(typeid(J).isBaseOf(typeid(C3))); 37 assert(!typeid(J).isBaseOf(typeid(Object))); 38 39 assert(typeid(C4!int).isBaseOf(typeid(C5!int))); 40 assert(typeid(K!int).isBaseOf(typeid(C5!int))); 41 assert(!typeid(C4!Object).isBaseOf(typeid(C5!int))); 42 assert(!typeid(K!Object).isBaseOf(typeid(C5!int))); 43 44 static assert(!__traits(compiles, TypeInfo.init.isBaseOf(typeid(C1)))); 45 static assert(!__traits(compiles, typeid(C1).isBaseOf(TypeInfo.init))); 46 } 47