Proposal to add 'Elements of Programming' Concepts to std.traits

Jonathan M Davis jmdavisProg at gmx.com
Sat Jun 16 23:42:45 PDT 2012


On Sunday, June 17, 2012 08:38:41 Philippe Sigaud wrote:
> On Sat, Jun 16, 2012 at 9:22 PM, bearophile <bearophileHUGS at lycos.com> 
wrote:
> > I see. is that semantically different from this (beside being shorter)?
> > 
> > struct NoZero {
> >    int value;
> >    this(int x) { value = x; }
> >    alias value this;
> >    invariant() { assert(value != 0); }
> > }
> > void main() {
> >    auto a = NoZero(5);
> >    auto b = NoZero(0);
> > }
> 
> The invariant isn't invoked through alias this, it seems:
> 
> void main() {
>    auto a = NoZero(5);
>    a = 0; // compiles and runs happily
> }

It wouldn't be. No public function was called. All you did was access the 
public member variable. Having public members and invariants at the same time 
doesn't work very well.

- Jonathan M Davis


More information about the Digitalmars-d mailing list