Can D not reduce template error messages?
IntegratedDimensions
IntegratedDimensions at gmail.com
Sat Jun 2 09:48:26 UTC 2018
Getting N messages for N template parameter variations on a
template.
void foo(A,B)();
A and B are selected from N different values and all are used.
If there is an error in the function then I get N^2 error
messages, one for each combination. All the error messages say
the same thing except A and B are different.
If the error message is several lines then that is multiplied by
N^2.
Why can't D do a bit of error diagnostics. If the errors pertain
to the same template and have every character the sample except
the template values then just make a generic message:
These are the actual error messages, I did not copy and paste!!!
o.d(152): Error: function `foo!(float, float).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, float).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(274): Error: template instance `foo!(float, float)`
error instantiating
o.d(152): Error: function `foo!(float, int).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, int).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(277): Error: template instance `foo!(float, int)`
error instantiating
o.d(152): Error: function `foo!(float, int24).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, int24).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(280): Error: template instance `foo!(float, int24)`
error instantiating
o.d(152): Error: function `foo!(float, short).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, short).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(283): Error: template instance `foo!(float, short)`
error instantiating
o.d(152): Error: function `foo!(float, byte).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, byte).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(286): Error: template instance `foo!(float, byte)`
error instantiating
o.d(152): Error: function `foo!(float, ubyte).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, ubyte).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d-mixin-264(289): Error: template instance `foo!(float, ubyte)`
error instantiating
o.d(152): Error: function `foo!(float, void).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(float, void).bar(string)` is not
callable using argument types `(int)`
and this is when A is constant! When I allow A to vary then it
is squared in number!! It is ridiculous!
It all could be simplified:
.d-mixin-264(274): Error: template instance `foo!(A, B)` error
instantiating
o.d(152): Error: function `foo!(A, B).bar(string)` is not
callable using argument types `(int)`
o.d(152): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
o.d(174): Error: function `foo!(A, B).bar(string)` is not
callable using argument types `(int)`
o.d(174): cannot pass argument `bufPos` of type `double`
to parameter `int x = 0`
where A is float, B is ubyte, void, float, etc...
More information about the Digitalmars-d
mailing list