Why code failed to compile for foo2?

Stanislav Blinov stanislav.blinov at gmail.com
Sun Dec 12 00:02:25 UTC 2021


On Saturday, 11 December 2021 at 23:44:59 UTC, Adam Ruppe wrote:
> On Saturday, 11 December 2021 at 23:17:17 UTC, Stanislav Blinov 
> wrote:
>> ? No. If it was unsatisfied constraint, the error would've 
>> shown that.
>
> And if you try to instantiate it, you'll see it is an 
> unsatisfied constraint anyway. There's two layers of failure 
> here.
>
> Using Unqual there is pretty iffy, i wouldn't bother with it at 
> all, but if you do anything, instead qualify it const.
>
> But either way, then the constraint still fails since int isn't 
> unsigned.
>
> I'd really recommend simplifying this a lot.

??? There is no unsatisfied constraint, it doesn't get there :)

> unq.d(6): Error: template `unq.foo2` cannot deduce function 
> from argument types `!()(int)`
> unq.d(2):        Candidate is: `foo2(T)(Unqual!T x)`

...because passed argument - `int` - becomes `Unqual!T`, making 
`T` unknown - template arg list is empty. Deduction fails :) If 
`int` is an `Unqual!T`, what is `T`? The constraint is testing 
`T`.

Now, if you explicitly instantiate - sure, you'd get unsatisfied 
constraint. But the OP seems to want IFTI, which simply can't 
work here.

@apz28, I can't figure out the intent here. To convert result of 
abs to an unsigned?


More information about the Digitalmars-d-learn mailing list