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