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: nob...@puremagic.com
        ReportedBy: cbkbbej...@mailinator.com


--- Comment #0 from Nick Sabalausky <cbkbbej...@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: -------

Reply via email to