On Saturday, 21 May 2016 at 21:49:23 UTC, Jonathan M Davis wrote:
Rebindable is in kind of a weird grey area. It involves a
union, not casting, and it's only ever mutating the class
reference, not the object itself. Certainly, if it mutated the
object, it would be undefined behavior, but it's just mutating
the reference - but then again, the type system itself doesn't
really differentiate between the two. So, I suspect that what
it comes down to is that Rebindable is doing something that you
really shouldn't, but because it's using a union rather than a
cast, and it's so limited in what it's mutating, its behavior
is effectively defined in the sense that the compiler has no
leeway, but's probably still technically undefined. I don't
know what Walter would say though. Certainly, if casting were
involved, it would be undefined behavior without question, and
it's not the sort of thing that you should be doing in your own
code.
[...]
I agree. But I think we need something that allows *logical*
const and immutable.
Strict binding constness to physical memory constancy is not
always necessary and sometimes even harmful.