On 03/24/2011 06:50 PM, bearophile wrote:
A little quiz for people here: guess the output of this little D2 program (it 
compiles correctly and doesn't crash at run time, so it's a fair question):


import std.typecons: tuple;
import std.c.stdio: printf;

auto foo() {
     printf("foo\n");
     return tuple(1, 2);
}

void main() {
     foreach (x; foo().tupleof)
         printf("%d\n", x);
}


Bye,
bearophile

That's pretty cool :) Seems like we should be able to expect the same behavior in all of these, but that doesn't appear to be the case at all.



import std.typecons: tuple;
import std.c.stdio: printf;

auto foo() {
    printf("foo\n");
    return tuple(1, 2);
}

void main() {
    printf("-----\n");
    foreach (x; foo().tupleof)
        printf("%d\n", x);
    printf("-----\n");
    auto f = foo();
    printf("-----\n");
    foreach (x; f.tupleof)
        printf("%d\n", x);
    printf("-----\n");
    auto f2 = foo().tupleof;
    printf("-----\n");
    foreach (x; f2)
        printf("%d\n", x);
    printf("-----\n");
}

Reply via email to