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