On Tuesday, 31 July 2018 at 12:37:34 UTC, Steven Schveighoffer wrote:
On 7/29/18 1:46 PM, aliak wrote:
On Sunday, 29 July 2018 at 12:45:48 UTC, Steven Schveighoffer wrote:

Am I applying inout incorrectly?

No, you need to apply it to wrap as well. I can't get run.dlang.io to work for posting a link, so here is my modified version:


Ah bugger, right!

Ok so there's no way to make explicit instantiation involving immutable work in the face of an inout parameter? Seems rather inconsistent no?

It's not that there's no way, the issue is simply that you are explicitly instantiating incorrectly.

wrap!int(immutable(int)(3));

-Steve

Ok bear with me, but I'm really confused why "wrap!int(immutable(int)(3))" is "correct".

This all seems very inconsistent:

1. wrap!(int)(3); // ok
2. wrap!(const int)(3); // ok
3. wrap!(immutable int)(3); // nope
4. wrap!(int)(3); // ok
5. wrap!(const int)(const(int)(3)); // ok
6. wrap!(immutable int)(immutable(int)(3)); // ok!

So for 3, compiler sees the instantiation:

 inout(W!(immutable int)) wrap(immutable(int))

If I understood you correctly?

But then what does it see in number 6, which works fine? And why is 2 ok if 3 is not? And finally, why can't the compiler leave the inout there and then it doesn't need to complain about it?

Cheers,
- Ali

Reply via email to