How to get an inout constructor working with a template wrapper
aliak
something at something.com
Tue Jul 31 21:29:46 UTC 2018
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
More information about the Digitalmars-d-learn
mailing list