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