On Monday, 24 September 2012 at 07:25:28 UTC, Denis Shelomovskij wrote:
20.09.2012 15:35, monarch_dodra пишет:

AFAIK, if the rules are the same in C++ (which they probably are), then: "Any object constructed during argument passing will remain valid for the duration of the call. It will go out of scope once the function has finished returning, and after the return value has itself gone out of
scope and been destroyed."


Thanks, looks like D does have C++ behaviour here. But your last statement about return value is incorrect. More than that function call doesn't change anything.

Correct answers are here:
* `12.2 Temporary objects [class.temporary]` section of C++ standard * http://stackoverflow.com/questions/2506793/c-life-span-of-temporary-arguments * http://stackoverflow.com/questions/5459759/full-expression-boundaries-and-lifetime-of-temporaries

How is my statement incorrect? The "function call" itself doesn't change anything sure, since it is more generally a "full expression": The return value itself is created *during* that full expression, but after the creation of the arguments. Last in, first out, it is destroyed before the passed in arguments.

Unless you were playing on the words "gone out of scope" (which is indeed not the 100% correct), I don't see how my statement is incorrect.

Reply via email to