Continued looking at properties in D - interfaces and constraints

mikey via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Oct 12 13:49:40 PDT 2016


Also, accepting that "in" contracts should be "or"ed, interfaces 
still seem broken to me:

     import std.exception;

     interface Widthy {
         @property inout(int) width() inout;
         @property void width(int width) in { enforce(width < 0); }
     }

     class Test : Widthy {
     private:
         int _w;
     public:
         @property inout(int) width() inout { return _w; }
         @property void width(int width) in { enforce(width < 0); }
         body {
             _w = width;
         }
     }

     void main() {
         import std.stdio;
         auto t = new Test;
         t.width = -1;
         writeln("width: ", t.width);
         // width: -1

         // doesn't look right
     }

It does however behave how you describe if you use inheritance 
with 2 classes, or if you change the interface property's 
contract to:

    @property void width(int width) in { assert(0); }



More information about the Digitalmars-d-learn mailing list