Summary: Function overloads are not distinguished when
                    instantiating templates
           Product: D
           Version: 2.041
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: patch, wrong-code
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Shin Fujishiro <> 2010-05-21 04:32:09 PDT 
Created an attachment (id=639)
Patch for DMD svn r496

interface I
    int test(int);
    real test(real);
pragma(msg, typeof(__traits(getOverloads, I, "test")));

template Test(alias func) { pragma(msg, "Test: ", typeof(func)); }
alias Test!(__traits(getOverloads, I, "test")[0]) Test0;
alias Test!(__traits(getOverloads, I, "test")[1]) Test1;

static assert(!__traits(isSame, Test0, Test1));
(int(int), real(real))
Test: int(int)
test.d(12): Error: static assert  (!true) is false

There is no "Test: real(real)" in the output.  And the two aliases are reported
as the same; the first instance Test0 is reused for the second instantiation

The attached patch fixes the problem by adding a check for overloaded functions
to the match() function in template.c.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to