Why code failed to compile for foo2?
Tejas
notrealemail at gmail.com
Tue Dec 14 05:04:46 UTC 2021
On Monday, 13 December 2021 at 20:43:51 UTC, Steven Schveighoffer
wrote:
> On 12/11/21 10:02 PM, apz28 wrote:
>> On Sunday, 12 December 2021 at 00:02:25 UTC, Stanislav Blinov
>> wrote:
>>> @apz28, I can't figure out the intent here. To convert result
>>> of abs to an unsigned?
>>
>> The function logic works only for unsigned type and the
>> parameter value can be altered in body hence Unqual. If not
>> Unqual, must declare a local var and make a copy. Just asking
>> if this can be done to avoid a cast by caller
>
> To translate a bit here, what apz28 is looking for is, given
> ANY value type that implicitly converts from the qualified
> value to the unqualified value, generate *one* function that
> only accepts the unqualified value.
>
> You can wrap like:
>
> ```d
> void foo2(T)(T v) if (!is(Unqual!T == T))
> {
> foo(Unqual!T(t));
> }
> ```
>
> This will inline as if you called it directly (which should
> just whittle down to a direct call to the correct foo2).
>
> But D isn't currently smart enough to see through aliases, so
> IFTI will not work for what you are doing, even in a case like:
>
> ```d
> template foo2(T) if (!isUnqual!T == T)
> {
> alias foo2 = .foo2!(Unqual!T);
> }
> ```
>
> It would be nice if IFTI gave some hooks between the parameter
> and the deduction, but it currently doesn't.
>
> -Steve
Is there anything wrong with the answer I posted?
Can you please tell me if there's anything dissatisfactory about
it? I feel like it does everything the OP wants.
Also, am I wrong in using `Unconst` over `Unqual`? Isn't `Unqual`
overkill if you just want to cast away `const`?
More information about the Digitalmars-d-learn
mailing list