This is almost the same code as written initially,
let somone explain why the hell this is working:

---
module test;
import std.conv;

class Parent {
  @property final string typeName() {
    return to!string(this);
  }
}

class Child : Parent {
}

void main() {
  auto p = new Parent;
  auto c = new Child;
  assert(p.typeName == __MODULE__ ~ ".Parent");
  assert(c.typeName == __MODULE__ ~ ".Child");
}
---

Because to!string calls toString, which is a virtual function. It's the same as the NVI-Idiom in C++.

Reply via email to