Hi, I just found a bug that comes out of the property syntax.
The property syntax is great in that it allows a smooth transition from simple code dealing with public member variables to the use of interfaces without needing to update the client code. i.e. A.bob = 1 can stay as A.bob = 1 when bob changes from being an int to being void A::bob(int i) instead of changing to A.bob(1). But this can introduce the bug I show below. Proposal : If the temporary returned by the property syntax getter function is modified, then the corresponding setter function needs to be called with the temporary as argument. struct A { int i; int j; }; class B { A mA; public: A a() { return mA; } void a(Atom a) { mA = a; } }; int main() { B b; b.a.j = 10; // error b.a is a temporary. }