How to get an inout constructor working with a template wrapper
aliak
something at something.com
Tue Jul 31 22:24:51 UTC 2018
On Tuesday, 31 July 2018 at 21:54:54 UTC, Steven Schveighoffer
wrote:
> Because inout is trying to combine all mutability modifiers
> into one. You want to specify the type, not the mutability, in
> the template parameter T.
Ahhh. Ok I see... I think.
> This doesn't make sense. Can you post runnable code?
Hehe, ok, so I fell victim to compiler generating an error for
number 3 and then nothing else :p But yes you're right, if I
comment out number 3 then 6 errors as well. Sorry my bad!
>
> When I go back to your original failing example, and replace
> the 3 with immutable(int)(3), it still fails.
>
>>
>> So for 3, compiler sees the instantiation:
>>
>> inout(W!(immutable int)) wrap(immutable(int))
>>
>> If I understood you correctly?
>
> Yes. You can see for yourself with pragma msg:
>
> pragma(msg, typeof(t)); // immutable(int)
>
>>
>> But then what does it see in number 6, which works fine?
>
> I'm skeptical this is the case.
>
> Note that you may only see the instantiation error ONCE.
Yep, you nailed that one.
>
>> And why is 2 ok if 3 is not?
>
> because inout(const(T)) cannot have its inout removed.
Because it may be an immutable? Or?
> But the complaint is really the issue. Clearly inout is
> specified, so it shouldn't complain that it isn't.
Aye. I guess that's right.
>
> -Steve
More information about the Digitalmars-d-learn
mailing list