Moving back to .NET

Sebastiaan Koppe via Digitalmars-d digitalmars-d at puremagic.com
Mon Sep 21 06:40:37 PDT 2015


On Monday, 21 September 2015 at 13:03:20 UTC, default0 wrote:
> On Monday, 21 September 2015 at 00:01:01 UTC, Temtaime wrote:
>> I also hate errors when a lambda contains some errors.
>>
>> [ 1 ].countUntil!(a => a == undeclared_something);
>>
>> Error: template std.algorithm.searching.countUntil cannot 
>> deduce function from argument types !((a) => a == 
>> undefined)(int[])
>
> I agree, the error should contain better reasoning as to why 
> the function cannot be deduced. Since Phobos uses templates 
> pretty heavily, and sometimes has a decent set of 
> pre-conditions, tracking down which condition exactly is 
> failing is hard. Printing the template condition and the 
> expression in it that caused the instantiation to fail would be 
> tremendously helpful!

The problem is that the compiler doesn't know which version of 
the template constraints you meant to invoke.

e.g.

void foo(Bar)(Bar b) if (isSomething!Bar) { ... }

and

void foo(Bar)(Bar b) if (isSomethingElse!Bar) { ... }

The best thing the compiler can do is say `Error: Bar != 
isSomething and Bar != isSomethingElse`. Which is basically what 
its doing right now.


More information about the Digitalmars-d mailing list