I have: [code] module A; module A; interface B { public: immutable B dup(); } class A : B { public: this() {} this(in char[] field) { this.field = field.dup; } immutable A dup() { return new A(field); } private: char[] field; } void main() { B f, g; f = new A; g = new A; f = g.dup; } I get