Inheritance of purity
so
so at so.so
Thu Feb 23 12:14:44 PST 2012
If it can be applied to const, wouldn't it be like "const by
convention" that you argued against?
On Friday, 17 February 2012 at 02:49:40 UTC, Walter Bright wrote:
> Given:
>
> class A { void foo() { } }
> class B : A { override pure void foo() { } }
>
> This works great, because B.foo is covariant with A.foo,
> meaning it can "tighten", or place more restrictions, on foo.
> But:
>
> class A { pure void foo() { } }
> class B : A { override void foo() { } }
>
> fails, because B.foo tries to loosen the requirements, and so
> is not covariant.
>
> Where this gets annoying is when the qualifiers on the base
> class function have to be repeated on all its overrides. I ran
> headlong into this when experimenting with making the member
> functions of class Object pure.
>
> So it occurred to me that an overriding function could
> *inherit* the qualifiers from the overridden function. The
> qualifiers of the overriding function would be the "tightest"
> of its explicit qualifiers and its overridden function
> qualifiers. It turns out that most functions are naturally
> pure, so this greatly eases things and eliminates annoying
> typing.
>
> I want do to this for @safe, pure, nothrow, and even const.
>
> I think it is semantically sound, as well. The overriding
> function body will be semantically checked against this
> tightest set of qualifiers.
>
> What do you think?
More information about the Digitalmars-d
mailing list