void test(uint a) { } void test(char[] a) { } template _test1(T = void) { alias test _test1; } alias test _test2; void main() { _test2("a".dup); _test2(1U); _test1!()("a".dup); // Error: cannot implicitly convert expression (_adDupT(&_D12TypeInfo_Aya6__initZ,cast(string)"a")) of type char[] to uint _test1!()(1U); } Note how the alias outside the template works fine, but the one inside the alias only picks up the lexically first match. Note that this works fine in D1.
https://github.com/D-Programming-Language/dmd/pull/886
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/85d53d2ae46190f3fe5a1788594b15ee4cb7f0f4 fix Issue 7418 - Overloading doesn't work with aliases declared inside templates https://github.com/D-Programming-Language/dmd/commit/83acb3b4e58c1abe4e74f30819fb60490b547ff9 Merge pull request #886 from 9rnsr/fix7418 Issue 7418 - Overloading doesn't work with aliases declared inside templates