Here's the beginning of an interesting little experiment to simulate reference variables using `alias this` to disguise a pointer as a reference. Could add a destructor to set the pointer to null when a reference goes out of scope.

```
struct reference(T)
{
    T* ptr;
    this(ref T x)
    {
        ptr = &x;
    }
    import std.exception : enforce;

    ref T cnvrt() @property
    {
        enforce( ptr !is null);
        return *ptr;
    }
    ref T cnvrt(T x) @property
    {
        enforce( ptr !is null);
        return *ptr = x;
    }
    alias cnvrt this;
}

void main()
{
    int i;
    auto ri = reference!int(i);
    auto ri2 = reference!int(ri);

    assert(ri.ptr==ri2.ptr);

    i = 99;
    assert(i==ri && i==ri2 && ri==ri2);

    ri = 100;
    assert(i==ri && i==ri2 && ri==ri2);

    ri2 = 101;
    assert(i==ri && i==ri2 && ri==ri2);
}
```

Reply via email to