www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10556] New: mixin template fails overload resolution

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10556

           Summary: mixin template fails overload resolution
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: monarchdodra gmail.com


--- Comment #0 from monarchdodra gmail.com 2013-07-06 07:06:03 PDT ---
--------mixin template fooImpl(T)
{
    static void foo(T t)
    {}
}
struct S{}
mixin fooImpl!S;
mixin fooImpl!int;
mixin fooImpl!long;

void main()
{
    S s;
    int a;
    foo(s);
    foo(a); //17
}

--------
hello.d
17
Error: hello.fooImpl!(int).foo at hello.d:3 conflicts with
hello.fooImpl!(long).foo at hello.d:3
--------

Here, I'm using mixin template fooImpl to create a finite set of non-template
functions. In particular, I'm generating the functions "foo(int)" and
"foo(long)".

Yet, when making the call to "foo" with an int, the compiler complains of
finding multiple matches, failing to "see" that there is an exact match.

Apparently, I think the compiler sees "foo" as template functions
"fooImpl!long.foo(long)", so they all equally match. I think this is wrong
behavior.

The specs state that "If two different mixins are put in the same scope, and
each define a declaration with the same name, there is an ambiguity error when
the declaration is referenced", however this is clearly not the case, since
"foo(s)" is correctly resolved. foo(int) and foo(long) should also correctly
resolve just as well.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 06 2013
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10556


monarchdodra gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           See Also|                            |http://d.puremagic.com/issu
                   |                            |es/show_bug.cgi?id=8074


--- Comment #1 from monarchdodra gmail.com 2013-07-06 07:09:46 PDT ---
http://d.puremagic.com/issues/show_bug.cgi?id=8074

8074 is related, although it deals with "strictly non-ambiguous overloads". In
this example, there are multiple matches, but one is "exact".

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 06 2013