Consider the following example: ``` struct A {
auto a(int _a) { return this._a = _a; } int _a = 0; } void main() { static assert(!__traits(compiles, { A()._a = 2; })); static assert(__traits(compiles, { A().a(2); })); } ``` (https://run.dlang.io/is/GkmpA8) Why is it a compile error to set `_a` directly but calling `a` just works fine? If we prevent modifying members of rvalues directly, I would also expect calling non-const member functions of rvalues to be prevented.