Feature Request: Location of template instantiation failure
BCS
BCS at pathlink.com
Tue Dec 11 10:09:48 PST 2007
Janice Caron wrote:
> Consider the following code
>
> import std.stdio;
>
> int f(int N)(int x)
> {
> static assert(N >= 0 && N < 10); // line 5
> return N + x;
> }
>
> void main()
> {
> writefln(f!(3)(3));
> writefln(f!(13)(1)); // line 12
> writefln(f!(7)(2));
> }
>
> It won't compile. This is correct. I don't want it to compile.
>
> What concerns me is that there's no way to locate the real error. The
> error message which the compiler emits is:
>
> test.d(5): static assert is false
>
> There is indeed a static assert on line 5, and for ONE of the
> instantiations it comes out false. But the /real/ error is on line 12,
> where I pass an invalid parameter to the template. The compiler
> doesn't tell me that.
>
> So ... feature request: If the DMD compiler is unable to instantiate a
> template, then, as part of the error reporting, please could it print
> out the filename and line number of the line which triggered the
> instantiation? It would be so much more helpful to see:
>
> test.d(5): static assert is false
> test.d(12): instantiation failure
>
> or similar.
how about a template stack trace?
test.d(5): static assert is false
test.d(12): f instantiation failure
bob.d(21): foo instantiation failure
.
.
.
More information about the Digitalmars-d
mailing list