On 14.03.2016 09:42, John wrote:
   module one;

   struct Test(T) {}

   void testing(T)(Test!T t) {}

   module two;

   struct Test(T : int) {}

   void main() {
     Test!int i;
     testing!int(i);
   }

Output:
   error : testing (Test!int t) is not callable using argument types
(Test!int)

If I put everything in the same module it works. So are template
specializations limited to the same module?

The two `Test` templates are completely unrelated to each other. `one.testing` only accepts `one.Test`, it isn't aware of `two.Test` at all.

You can bring them together with `alias`:

----
module one;
static import two;

alias Test = two.Test;
struct Test(T) {}

void testing(T)(Test!T t) {}
----

`one.testing` still only accepts `one.Test`, but `one.Test` now includes `two.Test`, so it works.

Sadly, dmd doesn't like it when you put the alias line behind the struct line. I think that's a bug. Filed it here:
https://issues.dlang.org/show_bug.cgi?id=15795

Reply via email to