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