Specialized template in different module
ag0aep6g via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Mar 14 03:17:55 PDT 2016
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
More information about the Digitalmars-d-learn
mailing list