Borden Rhodes:
> <code>int gear {1...6} = 1;</code>

I think Walter said that Ranged Types are a "failed feature" of Pascal/Ada 
lineage, but I don't agree and I think they are useful to increase code safety, 
a possible syntax from yours:

typedef int { 1 ... 6 } Gear;

Using a struct with "alias this" and a struct invariant that enforces the 
range, plus properties, is possible, but such struct:
- Doesn't act transparently as a int subclass;
- Syntax-wise it's longer to define;
- The invariant is not enforced in all situations.

struct Gear {
    int g_ = 1;
    this(int g) { this.g_ = g; }
    invariant() { assert(this.g_ >= 1 && this.g_ <= 6); }
    @property void g(int x) { this.g_ = x; }
    @property int g() { return this.g_; }
    alias g this;
}

Bye,
bearophile

Reply via email to