On Sunday, 28 June 2020 at 21:01:36 UTC, NonNull wrote:
On Sunday, 28 June 2020 at 20:59:59 UTC, NonNull wrote:
Using gdc (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0
Please criticize:

struct refer(T) {
  T* ptr;
  this(ref T x) { ptr = &x; }
  ref T _() { return *ptr; }
  alias _ this;
  string toString() { import std.conv; return to!string(*ptr);
 }
}

This will make a reference variable (simulation). [ toString() is just for writeln. ]

void main() {
    int i = 100;
    refer!int j = i;
    j = 3;
    writeln(i);
    i = 100;
    writeln(j);
    j += 3;
    writeln(i);
    refer!int k = j;
    writeln(k);
}

And a refer!int can be returned as it is just a value. Returning one that contains a pointer to a local variable leads to a compilation error.

* does not lead to a compilation error

Now with a different compiler I this:

Deprecation: Cannot use alias this to partially initialize variable j of type refer. Use j._()

This is for the line j=3

What is this about? Where does this hidden rule come from?

Reply via email to