On Tuesday, 20 December 2016 at 14:47:28 UTC, Walter Bright wrote:
On 12/20/2016 5:47 AM, Ilya Yaroshenko wrote:
One good thing for safety and CTFE is allow multiple return value. In
combination with `auto ref` it is _very_ powerful:

----
auto ref front()
{
// Returns 2 values, each value is returned by reference if possible
  return (a.front, b.front);
}
----

http://dlang.org/phobos/std_typecons.html#.tuple

auto ref front() {
    return tuple(a.front, b.front);
}

Tuples can not work with auto ref. This is a reason for this thread.
Proof:
-----
import std.typecons: tuple;

int[] a = [1,2,3];
int[] b = [1,2,3];

auto ref front() {
        import std.range: front;
    return tuple(a.front, b.front);
}

void main()
{
        front()[0] = 1000;
        import std.stdio;
        writeln(front()[0]);
}
-----
Output: 1
-----

As you can see the output should be 1000, but it is 1.

It can be solved with pointers, and Mir will have their own tuples which use pointers. But it is not good because:
1. Pointers are not CTFE-able.
2. Pointers are not safe.

Reply via email to