With the latest DMD I've noticed that the following no longer works:

struct A { int[4] _data; }

struct B {
  ref B foo(const ref A a) { }
}

B b = B().foo(A([1, 2, 3, 4]));  // Error: A() is not an lvalue


How much of a difference is 'ref' supposed to make once DMD improves
in the future?  Am I better off not using 'ref'?  I suppose I still
don't know when to go with 'ref' and when not to.

Is there supposed to be a performance difference between something like this:

// _1
struct B {
  ref B foo(const ref A a){ }
}

A a = A([1, 2, 3, 4]);
B b = B().foo(a);

and this:

// _2
struct B {
  ref B foo(A a){ }
}

B b = B().foo(A([1, 2, 3, 4]));


???

P.S.
In the past I've noticed improvement in performance when using 'ref'.
With the latest DMD, using 'ref' is actually slightly slower (at least
in the above example)

Reply via email to