Why do 'abstract' methods with 'in' or 'out' contracts require a body?
KlausAlmaust via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 13 01:39:58 PDT 2014
On Saturday, 13 September 2014 at 07:32:23 UTC, Marc Schütz wrote:
> 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
interfaces as well, if the final attribute is specified, which is
a nice feature imo, since you reason in the interface scope.
More information about the Digitalmars-d-learn
mailing list