Invariants broken with out cast!!!

Denton Cockburn diboss at hotmail.com
Fri Dec 7 00:19:38 PST 2007


On Fri, 07 Dec 2007 08:17:34 +0000, Denton Cockburn wrote:

> On Thu, 06 Dec 2007 20:43:12 -0800, Robert DaSilva wrote:
> 
>> An invariant(int) can be assigned to an invariant(int)*, this wasn't
>> possible in 2.007. Just compile the attach test case. import std.stdio;
>> 
>> void main()
>> {
>>     invariant(int) a;
>>     invariant(int)* b = &a; // error in 2.007, ok in 2.008 writeln(*b);
>>     a = 1;
>> //    *b = 2; // error
>>     writeln(*b);
>> }
> 
> Then again, I'd expect *b to be mutable if a is mutable. Someone care to
> explain what the correct behaviour should be and why?

Nevermind, I think I got it.

a is a mutable ref to an invariant int.
b is a pointer to an invariant int
thus: *b is an invariant int that cannot be reassigned



More information about the Digitalmars-d mailing list