[Issue 8002] New: Excess initial errors when passing template args to non-templated struct
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Apr 29 14:13:03 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8002
Summary: Excess initial errors when passing template args to
non-templated struct
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: diagnostic
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: cbkbbejeap at mailinator.com
--- Comment #0 from Nick Sabalausky <cbkbbejeap at mailinator.com> 2012-04-29 14:14:11 PDT ---
---------------
import std.stdio;
struct Foo
{
int a;
}
int bar()
{
writeln();
return 1;
}
void main()
{
Foo x = Foo!(bar());
}
---------------
A template argument is (accidentally) being passed to Foo. The compiler should,
and does, print a "not a template declaration" error. But before doing so, it
evaluates the completely erroneous template arg, resulting in a big pile of
totally non-applicable error text ("cannot be interpreted at compile time")
which obscures the one real problem.
>dmd test.d
C:\Documents and Settings\Nick Sabalausky\Application
Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): Error: fputc
cannot be interpreted at compile time, because it has no available source code
C:\Documents and Settings\Nick Sabalausky\Application
Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): called
from here: enforce(fputc(10,(*stdout.p).handle) == 10,delegate pure nothrow
@safe const(char)[]()
{
return null;
}
)
test.d(10): called from here: writeln()
test.d(16): called from here: bar()
test.d(16): Error: template instance Foo!(bar()) Foo is not a template
declaration, it is a struct
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list