// https://issues.dlang.org/show_bug.cgi?id=11294 string result; extern(C) void rt_finalize(void *ptr, bool det=true); void clear(T)(T obj) if (is(T == class)) { rt_finalize(cast(void*)obj); } class A { ~this() { result ~= "A"; } string dummy = "0"; } class B { A a; string dummy = "0"; alias a this; ~this() { result ~= "B"; } } void test11294() { auto a = new A; auto b = new B; b.a = a; result ~= b.dummy; clear(b); result ~= a.dummy; result ~= "END"; clear(a); assert(result == "0B0ENDA"); } // https://issues.dlang.org/show_bug.cgi?id=13392 void foo(T)(T t) { void* p = cast(void*) t; //Callas alias this } class X {} class Y { alias a this; @property X a(){assert(0);} //Here } void test13392() { foo(B.init); } void main() { test11294(); test13392(); }