Unless I misunderstand something this shouldn't compile. But it compiles fine in DMD 2.012. Is this a bug? import std.stdio; class A { public: int x = 0; void setX(int nx) const { x = nx; } } void foo(const A a) { a.setX(1); } int main(char[][] args) { A a = new A; foo(a); writefln(a.x); return 0; }