Another proposal idea:

I think in most setters (and other methods that modify an object like operator=) in the standard library (e.g. the setters real and imag in the complex class) the this-pointer should be lvalue ref-qualified, so that temporary objects can't be modyfied.

The signature of real should look like this
constexpr void real(T value) &;
instead of this
constexpr void real(T value);

In C++20 code like this
or this
std::complex<double>{} = std::complex<double>{};
would compile, but makes no sense.

That could potentially break existing code, but only code that has bugs anyway. So that's a feature not a bug. Or am I wrong?