Return Value Optimization: specification, requirements?

Eugene Wissner belka at
Sat Feb 2 11:26:02 UTC 2019

On Saturday, 2 February 2019 at 09:58:25 UTC, XavierAP wrote:
> I've heard here and there that D guarantees RVO, or is even 
> specified to do so...
> Is it spelled out in the language specification or elsewhere? I 
> haven't found it.

The D spec is often not the right place to look for the 
specification of the D language.
But yes D guarantees RVO. DMD frontend has RVO-tests and 
functions like std.algorithm.mutation.move rely on RVO and 
wouldn't work (and be possible) without RVO.

> Do you know the exact requirements for RVO or NRVO to be 
> possible in theory, and to be guaranteed in practice in D? Does 
> it depend only on what is returned, or does it depend how it's 
> constructed?

It is just plain RVO, I'm not aware of any differences for 
different types or kinds of cunstruction.

> I know I can debug to find out case by case, but that's the 
> kind of C++ stuff I want to avoid... I want to know the 
> theory/norm/spec.
> Thanks

More information about the Digitalmars-d-learn mailing list