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









"Janice Caron" <caron800 googlemail.com> 