On 03/10/2010 08:42 AM, Andrei Alexandrescu wrote:
On 03/09/2010 09:48 PM, Chad J wrote:
I speak of the property rewriting where an expression like
foo.prop++;
is rewritten as
auto t = foo.prop();
t++;
foo.prop(t);
This particular example has a number of issues. First off you need to
rewrite expressions, not statements. Consider:
auto x = foo.prop++;
You'd need to assign to x the old value of foo.prop. So one correct
rewrite is
foo.prop++
into
{auto t = foo.prop; auto t1 = t; ++t1; foo.prop = t1; return t;}()
within an rvalue context, and into:
{auto t = foo.prop; ++t; foo.prop = t; return t;}()
within a void context.
The latter should be:
{auto t = foo.prop; ++t; foo.prop = t;}()
because there's no need to return a value.
Andrei