[Issue 13710] New: Invariants not enforced on methods from alias this
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Mon Nov 10 23:20:20 PST 2014
    
    
  
https://issues.dlang.org/show_bug.cgi?id=13710
          Issue ID: 13710
           Summary: Invariants not enforced on methods from alias this
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: DMD
          Assignee: nobody at puremagic.com
          Reporter: markisaa at umich.edu
When you do "alias this" and have an invariant, any 
methods that are forwarded to the aliased member do not invoke 
your invariant methods.
This prevents me from writing a really sleek 10-liner to the tune 
of:
struct ValueRestrictedInteger(int lowerBound, int upperBound) {
  int value;
  alias value this;
  this (int rhs) { value = rhs; }
  invariant() {
    assert (value >= lowerBound && value <= upperBound);
  }
  void forDemonstrationOnly() {}
}
unittest {
  ValueRestrictedInteger!(0, 100) x = 0;
  x += 10;
  x -= 100; //This works, but I don't think it should
  x.forDemonstrationOnly(); //This causes the assertion to fire
  ValueRestrictedInteger!(0, 100) y = -100; //This also would hit 
the assertion
}
Forum post on same topic:
http://forum.dlang.org/thread/ijoqlxqlacccwmqnwpdn@forum.dlang.org
--
    
    
More information about the Digitalmars-d-bugs
mailing list