Multiple return values...

Timon Gehr timon.gehr at gmx.ch
Sun Mar 11 13:53:35 PDT 2012


On 03/11/2012 09:41 PM, Manu wrote:
> On 11 March 2012 20:57, Andrei Alexandrescu
...
>
>     Regarding low-level efficiency, the main issue is that structs and
>     function argument lists have distinct layouts. Consider:
>
>     import std.stdio, std.typecons;
>     int a(int b, int c) {
>         return b + c;
>     }
>     auto foo() {
>         return tuple(1, 1);
>     }
>     void main() {
>         writeln(a(foo().expand));
>     }
>
>     An adjustment may be needed from the output of a() to the arguments
>     of foo(). (Probably not in this case.) I understand that someone
>     very concerned with low-level performance would scrutinize such code
>     carefully.
>
>
> Wow, I can't imagine how '.expand' could possibly work :) .. that looks
> like total magic. A parameter list can be populated by items collected
> in a tuple via a property?

The property is a built-in tuple. :)

Tuple's implementation is not a lot more complicated than this:

struct Tuple(T...){
     T expand;
     alias expand this;
}

// 'magic' already available
int a(int b, int c){
     return b+c;
}

void main(){
     auto tuple = Tuple!(int, int)(1,2);
     writeln(a(tuple.expand));
}



More information about the Digitalmars-d mailing list