You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
--------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.
The text was updated successfully, but these errors were encountered:
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".
monarchdodra reported this on 2013-07-06T07:06:03Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=10556
CC List
Description
--------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.The text was updated successfully, but these errors were encountered: