On 2014-06-13 16:39:04 +0000, H. S. Teoh via Digitalmars-d said:


Basically, once the derived class overrides the property setter, the
(un-overridden) base class getter somehow becomes shadowed as well, and
references to .prop will cause a compile error saying that Derived.prop
can't be called without parameters.

So, what's going on here? Should this code be accepted? Is this a
compiler / language bug? A deliberate @property limitation? Or just more
evidence @property should be taken out the back and shot?


T

I had absolutely no problems with the following code. Note where and how the alias for prop is located.

import std.stdio;

        class Base {
                int propImpl;
                final @property int prop() {                    
writefln("hihihi!");
return propImpl; }
                @property void prop(int newVal) { propImpl = newVal; }

                void someMethod() {
                        auto x = prop; // OK, calls Base.prop()
                        prop = x; // OK, calls Base.prop(int)
                }
        }

        class Derived : Base {
                alias prop = super.prop;
                
                override @property void prop(int newVal) {
                        super.prop(newVal);
                        writefln("Hello!");
                }

                void someOtherMethod() {
                        auto x = prop; // NG - compile error ***
                        auto y = super.prop; // OK, calls Base.prop()
                        prop = x; // OK, calls Derived.prop()
                }
        }


void main() {
        auto foo = new Derived();
        foo.someOtherMethod();
}

Reply via email to