Template alias as template specialisation not recognized.

Paul Backus snarwin at gmail.com
Sat Jan 16 01:38:38 UTC 2021


On Saturday, 16 January 2021 at 01:21:24 UTC, Paul wrote:
> I'm having issues when trying to use a template alias as a 
> template specialisation.
> When using the following:
>> alias Vec(uint size, Type) = Mat!(size, 1, Type);
>
>> void setUniform(V : Vec!(L, bool), int L)(string name, V 
>> value) {...}
>
>> Vec!(4, bool) a;
>> setUniform("test", a);
>
> I get the following error:
>> template `shader.Shader.setUniform` cannot deduce function 
>> from argument types `!()(string, Mat!(4u, 1u, bool))`, 
>> candidates are:DUB
> shader.d(43, 7): `setUniform(V : Vec!(L, bool), uint L)(string 
> name, V value)`
>
> Meanwhile, when using the following, I have no issues:
>> void setUniform(V : Mat!(L, 1, bool), int L)(string name, V 
>> value) {}

You have encountered issue 1807:

https://issues.dlang.org/show_bug.cgi?id=1807

The easiest way to work around it that I know of is to change 
`Vec` from an alias into a struct:

struct Vec(uint size_, Type)
{
     Mat!(size, 1, Type) payload;
     alias payload this;
}


More information about the Digitalmars-d-learn mailing list