On Wed, 10 Mar 2010 17:16:11 -0500, Pelle Månsson
<pelle.mans...@gmail.com> wrote:
On 03/10/2010 10:14 PM, Steven Schveighoffer wrote:
I think this is fine as long as we don't take it to the extreme. That
is, I don't want to see this happening:
foo.prop1.prop2++;
is rewritten to
auto p1 = foo.prop1;
auto p2 = p1.prop2;
p2++;
p1.prop2 = p2;
foo.prop1 = p1;
I think one level of lowering is enough to handle the most common cases.
Of course, if a property returns an lvalue, then it should just work.
-Steve
Why would you not want that? That's exactly what should happen! Why not?
I'm sorry if I'm missing something obvious.
BTW, C# doesn't do this:
struct C
{
private int _x;
public int x
{
get
{
return _x;
}
set
{
_x = value;
}
}
}
struct D
{
private C _c;
public C c
{
get
{
return _c;
}
set
{
_c = value;
}
}
}
class X
{
static void Main()
{
D d = new D();
d.c.x += 5;
}
}
testme.cs(38,11): error CS1612: Cannot modify a value type return value of
`D.c'. Consider storing the value in a temporary variable
testme.cs(1,8): (Location of the symbol related to previous error)
Compilation failed: 1 error(s), 0 warnings
-Steve