Re: Very strange compilation error

2014-10-16 Thread John Colvin via Digitalmars-d-learn

On Wednesday, 15 October 2014 at 21:28:05 UTC, Nils Boßung wrote:

On Wednesday 15 October 2014 22:13, John Colvin wrote:


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/dfd8df7f80ad


that should be immutable(ubyte)[] not immutable ubyte[] which 
is

equivalent to immutable(ubyte[]). You can't overwrite immutable
data, hence the error.


Then

  Foo1 foo1; foo1 = Foo1(); // compiles

shouldn't compile either.


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.


Very strange compilation error

2014-10-15 Thread Jack Applegame via Digitalmars-d-learn

I don't understand why this code doesn't compile:

http://dpaste.dzfl.pl/dfd8df7f80ad


Re: Very strange compilation error

2014-10-15 Thread John Colvin via Digitalmars-d-learn
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/dfd8df7f80ad


that should be immutable(ubyte)[] not immutable ubyte[] which is 
equivalent to immutable(ubyte[]). You can't overwrite immutable 
data, hence the error.


Re: Very strange compilation error

2014-10-15 Thread Nils Boßung via Digitalmars-d-learn
On Wednesday 15 October 2014 21:29, Jack Applegame wrote:

 I don't understand why this code doesn't compile:
 
 http://dpaste.dzfl.pl/dfd8df7f80ad

Immutability issues with unions ring a bell for me. This may be related to 
issue 12885 [1] which is the result of dmd pull #2665 [2] which even 
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



Re: Very strange compilation error

2014-10-15 Thread Nils Boßung via Digitalmars-d-learn
On Wednesday 15 October 2014 22:13, John Colvin wrote:

 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/dfd8df7f80ad
 
 that should be immutable(ubyte)[] not immutable ubyte[] which is
 equivalent to immutable(ubyte[]). You can't overwrite immutable
 data, hence the error.

Then

  Foo1 foo1; foo1 = Foo1(); // compiles

shouldn't compile either.