Template argument deduction not working with template specialization

Paul paultjeadriaanse at gmail.com
Sun Jan 17 16:22:04 UTC 2021


While trying to use template specializations I noticed the 
argument deductions do not yield the same version as the ones 
yielded when being explicit.
Example:

> uint a = 1;
> uint[] b = [2];
> TFoo(a);
> TFoo!(uint[])(b);

> void TFoo(T)(T a) {
> 	pragma(msg, "T: " ~ T.stringof);
> }
> 
> void TFoo(T : T[])(T[] a) {
> 	pragma(msg, "T[]: " ~ T.stringof);
> }

I noticed that an automatically deduced TFoo call always yields 
the first, while TFoo!(uint[]) yields the array version if 
present, and defaults to the first elsewise.

Am I incorrect in expecting the same behavior when (ab)using 
argument deduction or does my usage make sense? I tried searching 
for this combination (deduction & specialization) but couldn't 
find another forum post / documentation example.


More information about the Digitalmars-d-learn mailing list