20.09.2012 15:35, monarch_dodra пишет:
On Thursday, 20 September 2012 at 09:31:45 UTC, Denis Shelomovskij wrote:
20.09.2012 13:27, Denis Shelomovskij пишет:
Is there any guaranties that `ScopeTemp` will not be destroyed before
`f` call because it isn't used?
---
...
f(ScopeTemp(...).value);
}
---
According to http://dlang.org/struct.html#StructDestructor
"Destructors are called when an object goes out of scope."
So I understand it as "it will not be destroyed before scope exit even
if not used". Is it correct?
So the question is if `ScopeTemp`'s scope is `main` scope, not some
possibly generated "temp scope" (don't now what documentation statements
prohibit compiler from doing so).
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
--
Денис В. Шеломовский
Denis V. Shelomovskij