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?