class Base { int number() { return _number; } // getter int number(int value) { return _number; } // setter private: int _number; } class Extension: Base { override int number(int value) // override setter { return 0; } void method() { printNumber(this.number); // call base getter // main.d(21): Error: function main.Extension.number (int) does not match parameter types () // main.d(21): Error: expected 1 arguments, not 0 } } Tries call overrided setter
Fake properties must die, all I can say.
Actually setter in the base class is not needed to trigger this bug. Also calling this.number() in method(), so adding call brackets, doesn't solve problem. So it is not only problem with setter/getter. This can lead to problem with perfectly valid code with no properties.
This bug report is invalid. You have to use alias to pull in the number overload set to Extension. class Extension: Base { alias number = Base.number; override int number(int value) // override setter { return 0; } void method() { printNumber(this.number); // calls Base.number } }