www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Return Value Optimization: specification, requirements?

reply XavierAP <n3minis-git yahoo.es> writes:
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.

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?

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
Feb 02 2019
parent Eugene Wissner <belka caraus.de> writes:
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
Feb 02 2019