For crying out loud, shared fails too: class Foo { shared this() { value = true; } @property bool value() { return true; } @property void value(bool value) { } } void main() { auto foo1 = new Foo; auto val1 = foo1.value; // fail }