I remember reading that guaranteed RVO was part of the D
standard, but I am completely unable to find anything on it in
the specification.

I'm also unable to find anything in it that explicitly states the
lifetime of returning a stack-local struct from a function.

However, it does state
Destructors are called when an object goes out of scope.

So without guaranteed RVO I am quite confused.

I apologize because this code will likely be poorly formatted.


import std.stdio;
struct S{
        ~this(){
                writeln("Goodbye!");
        }
}

S foo(){
        S s;
        return s;
}

void main()
{
        S s2 = foo();
}


This says "Goodbye!" exactly once, indicating(?) that S was
NRVO'd which means the scope of s went from foo to main.
However, is this a guarantee by the standard? Is an
implementation allowed to define foo such that it returns by copy
and calls a destructor on s, meaning "Goodbye!" would print out
twice?

Reply via email to