[Solved] Confusing error message

drug via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 7 07:58:26 PDT 2017


07.06.2017 16:27, Wulfklaue пишет:
> Some of the dmd error messages need some tweaking.
> 
>> import std.datetime;
>>
>> auto t = Clock.currStdTime;
>> writeln(to!string(t));
> 
> Result in:
> 
>> Error: template core.time.to cannot deduce function from argument 
>> types !(string)(long), candidates are:
>> C:\D\dmd2\windows\bin\..\..\src\druntime\import\core\time.d(1709):        
>> core.time.to(string units, T, D)(D td) if (is(_Unqual!D == 
>> TickDuration) && (units == "seconds" || units == "msecs" || units == 
>> "usecs" || units == "hnsecs" || units == "nsecs"))
> 
> 
>> import std.datetime;
>> import std.conv;
>>
>> auto t = Clock.currStdTime;
>> writeln(to!string(t));
> 
> Solves the issue but its strange that there is no error message 
> indicating that to! needs the std.conv included. Technically one can 
> argue that the original message mean that but its very, very unclear.
Error is right indicating that _available_ function `core.time.to` can 
not deduce from given types. It's impossible for compiler to know that 
you want use `std.conv.to` symbol.
In other words compiler says that it knows only one function `to` and 
this function are in `core.time.` module. And this function can not be 
called with given args. I prefer to use selective imports and in this 
case compiler would say it doesn't know function `to`.

For me it's a good message.


More information about the Digitalmars-d-learn mailing list