[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