Why is it possible to call non-const member functions of rvalues but a compile error to modify members or rvalues directly?
Johannes Loher
johannes.loher at fg4f.de
Sun Jun 14 10:12:40 UTC 2020
On Saturday, 13 June 2020 at 12:47:31 UTC, Stanislav Blinov wrote:
> [...]
> The temporary exists until the end of full expression, or until
> the end of enclosing statement. It is simply not an lvalue for
> the caller, but it certainly exists, and so its interface must
> function.
So public data members are not part of the interface? I
understand that it probably doesn't make much sense to mutate
data members of an rvalue but this just looks very inconsistent
to me, in particular if you consider the fact that you can also
call member functions with the = syntax:
```
struct A
{
auto a(int _a)
{
return this._a = _a;
}
int _a = 0;
}
void main
{
static assert(__traits(compiles, { A().a = 2; })); // this is
ok but looks like it shouldn’t be
}
```
More information about the Digitalmars-d-learn
mailing list