On 2012-04-09 19:56, Steven Schveighoffer wrote:

Then c.data cannot be the same reference as foo.data.

Counter-case:

void bar( const Foo foo)
{
auto c = foo.clone(); // assume this works;
*(cast(int*)c.data) = 6; // note even though I'm casting, there is no
removal of const, so this should be defined behavior.
}

immutable int i = 5;
const foo = new Foo(&i);
bar(foo);

assert(i == 5); // oops, it's 6!

In that case, you have to clone the data as well.

-Steve

Ok, I see, thanks.

--
/Jacob Carlborg

Reply via email to