Well, I guess wheelbarrowing works with templates similar to
functions if the template arguments are specified:
Doesn't work:
------------
import a;
import b;
void main()
{
// Ambiguity errors:
writeln(bar!string(int.init));
writeln(bar!string(char.init));
}
Works:
------
import a;
import b;
alias bar = a.bar!string;
alias bar = b.bar!string;
void main()
{
writeln(bar(int.init)); // 43
writeln(bar(char.init)); // 3
}
... but I just realized I'm not actually asking what I'm trying
to ask here. So, let me rephrase my question:
Why is the following ambiguous?
-----------
module a;
int foo(T)() if (is(T == int))
{
return 42;
}
-----------
module b;
int foo(T)() if (is(T == char))
{
return 3;
}
-----------
module main;
import std.stdio;
import a;
import b;
void main()
{
writeln(foo!int()); // Error: ambiguous template declaration
}