Safety of casting away constness instead of using postblit

Jonathan M Davis jmdavisProg at gmx.com
Fri Oct 15 00:09:22 PDT 2010


Okay. Bug http://d.puremagic.com/issues/show_bug.cgi?id=4867 is turning out to 
be a _big_ problem for the code that I'm working on at the moment. That combined 
with various bugs with regards to invariants is making dealing with const for 
certain things extremely difficult.

In this case, I have a struct which is a value type. It holds a long and a 
Rebindable which holds an immutable object. It _should_ be copyable without a 
postblit constructor, but the compiler apparently isn't smart enough to figure 
that out and complains up the wazoo. And thanks to the aforementioned bug, I 
can't _have_ a postblit. Bleh.

I can almost solve the problem on some level by creating a variable and then 
assigning to it with an overloaded opAssign(), except that the init for the 
struct type violates its invariant, so opAssign() blows up (maybe opAssign() 
shouldn't care about invariants...).

The only thing that I can think of (beyond giving up on const for some portions 
of my code until bug #4867 is fixed) is to just do the assignment but with a cast 
that casts away the constness of the struct. The question is whether this is 
safe. Since it's a struct, it should do a bit for bit copy, which should be 
totally valid, so I _think_ that it's safe, but I'd like to be sure. Does anyone 
know for sure if casting away constness like that would be safe?

- Jonathan M Davis


More information about the Digitalmars-d mailing list