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
}

Reply via email to