import std.stdio; class a { void f() { writefln(typeid(typeof(this))); } } class b:a { void delegate() g() { return &(a.f); } void f() { writefln(typeid(typeof(this))); } } class c:b { void f() { writefln(typeid(typeof(this))); } } int main(char[][] args) { b v=new c; v.g()(); return 0; } This program write "main.c" not "main.a"