On 06/04/2016 05:02 PM, chmike wrote:
Is it possible to instantiate immutable objects by using emplace
Yes. I'm not sure, but the memory may have to be untyped for the emplace call to avoid mutating immutable data. I.e., call emplace with void[], not with a pointer whose target is already type as immutable.
and modify the object in the toString() call ?
No. immutable means the object cannot, will not, must not ever change after construction.
This is to cache the resulting string to avoid creating a new string at each call. I would have to cast away the immutable attribute of 'this'. Is this possible ?
You can cast immutable away, but as soon as you mutate the object, you have an invalid program. You'd rely on undefined behavior.
Note that the objects would be instantiated by emplace in a void array at start up. So the memory is writable.
Doesn't matter. The compiler is free to assume that the data doesn't change after construction.
The compiler will let you cast away immutable and mutate then. It may work out as you expect. It's still undefined behavior, and I advise against doing it.