Why do 'abstract' methods with 'in' or 'out' contracts require a body?
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 13 00:32:22 PDT 2014
On Saturday, 13 September 2014 at 05:07:32 UTC, Trey Brisbane
wrote:
> Hey all,
>
> I have a class method defined like so:
>
> abstract class MyClass {
> public:
> @property
> abstract SomeClassType getField() pure nothrow
> out(result) {
> assert(result !is null, "Error: getField() returned null.");
> }
> }
>
> As you can see, this method is abstract, as well as in an
> abstract class. Why, then, do I get the following error when
> compiling it?
>
> "Error: function module.MyClass.getField in and out contracts
> require function body"
>
> Is this a compiler bug, or is there a reason for this?
>
> Thanks for your time!
I thought it was an error, but then I found this in the
documentation:
http://dlang.org/attribute.html#abstract
"Functions declared as abstract can still have function bodies.
This is so that even though they must be overridden, they can
still provide ‘base class functionality.’"
=> it's intentional
More information about the Digitalmars-d-learn
mailing list