digitalmars.D.learn - Very strange compilation error
- Jack Applegame (2/2) Oct 15 2014 I don't understand why this code doesn't compile:
- John Colvin (5/7) Oct 15 2014 that should be immutable(ubyte)[] not immutable ubyte[] which is
- Nils =?UTF-8?B?Qm/Dn3VuZw==?= (4/13) Oct 15 2014 Then
- John Colvin (6/20) Oct 16 2014 Good point. That's an accepts-invalid IMO.
- Nils =?UTF-8?B?Qm/Dn3VuZw==?= (33/36) Oct 15 2014 Immutability issues with unions ring a bell for me. This may be related ...
I don't understand why this code doesn't compile: http://dpaste.dzfl.pl/dfd8df7f80ad
Oct 15 2014
On Wednesday, 15 October 2014 at 19:29:27 UTC, Jack Applegame wrote:I don't understand why this code doesn't compile: http://dpaste.dzfl.pl/dfd8df7f80adthat should be immutable(ubyte)[] not immutable ubyte[] which is equivalent to immutable(ubyte[]). You can't overwrite immutable data, hence the error.
Oct 15 2014
On Wednesday 15 October 2014 22:13, John Colvin wrote:On Wednesday, 15 October 2014 at 19:29:27 UTC, Jack Applegame wrote:Then Foo1 foo1; foo1 = Foo1(); // compiles shouldn't compile either.I don't understand why this code doesn't compile: http://dpaste.dzfl.pl/dfd8df7f80adthat should be immutable(ubyte)[] not immutable ubyte[] which is equivalent to immutable(ubyte[]). You can't overwrite immutable data, hence the error.
Oct 15 2014
On Wednesday, 15 October 2014 at 21:28:05 UTC, Nils Boßung wrote:On Wednesday 15 October 2014 22:13, John Colvin wrote:Good point. That's an accepts-invalid IMO. Nonetheless: union { string a; immutable ubyte[] b; } is broken, it is effectively casting away immutability. union { string a; immutable(ubyte)[] b; } is the correct approach.On Wednesday, 15 October 2014 at 19:29:27 UTC, Jack Applegame wrote:Then Foo1 foo1; foo1 = Foo1(); // compiles shouldn't compile either.I don't understand why this code doesn't compile: http://dpaste.dzfl.pl/dfd8df7f80adthat should be immutable(ubyte)[] not immutable ubyte[] which is equivalent to immutable(ubyte[]). You can't overwrite immutable data, hence the error.
Oct 16 2014
On Wednesday 15 October 2014 21:29, Jack Applegame wrote:I don't understand why this code doesn't compile: http://dpaste.dzfl.pl/dfd8df7f80adImmutability issues with unions ring a bell for me. This may be related to mentions std.date.SysTime. Here's a reduced version of your test case: --- struct Rebindable { union { int m; immutable int i; } void opAssign(Rebindable another) {} } struct Foo3 { // Remove the union or _timezone and dmd accepts it. union { int m; immutable int i; } Rebindable _timezone; } void main() { Foo3 foo3; foo3 = Foo3(); } --- [1] https://issues.dlang.org/show_bug.cgi?id=12885 [2] https://github.com/D-Programming-Language/dmd/pull/2665
Oct 15 2014