digitalmars.D - Invariants broken with out cast!!!
- Robert DaSilva (2/2) Dec 06 2007 An invariant(int) can be assigned to an invariant(int)*, this wasn't
- Janice Caron (4/4) Dec 07 2007 None of that matters any more. It's all change again, and this time I
- Denton Cockburn (4/15) Dec 07 2007 Even if it's broken, the behaviour seems logical to me.
- Denton Cockburn (3/14) Dec 07 2007 Then again, I'd expect *b to be mutable if a is mutable.
- Denton Cockburn (5/21) Dec 07 2007 Nevermind, I think I got it.
An invariant(int) can be assigned to an invariant(int)*, this wasn't possible in 2.007. Just compile the attach test case.
Dec 06 2007
None of that matters any more. It's all change again, and this time I do believe we've got it right. We can worry about bugs in that next generation behaviour after it's implemented.
Dec 07 2007
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); }Even if it's broken, the behaviour seems logical to me. The types aren't different, so why would you need a cast? Just my 2 cents.
Dec 07 2007
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?
Dec 07 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: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 reassignedAn 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?
Dec 07 2007