emplace, immutable members and undefined behaviour

aewils via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Nov 15 01:52:48 PST 2015


According to http://dlang.org/const3.html any modification of 
immutable data causes undefined behaviour. Now I want to 
initialise a struct with immutable members in some malloc'd 
memory and found the emplace function. I came up with the 
following code:

import core.stdc.stdlib;

import std.conv;

struct Point {
  immutable double x;
  immutable double y;
}

void main() {
  void* a = malloc(Point.sizeof);
  Point* p = cast(Point*) a;
  emplace!Point(p, 1.0, 2.0);
}

this compiles and runs fine. Because emplace expects a typed 
pointer, it actually modifies (*p).x and (*p).y
As far as I understand, this causes undefined behavior.

Are there any (safe) alternatives to this code other than making 
the immutable members mutable?


More information about the Digitalmars-d-learn mailing list