[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