Parameters declared as the alias of a template won't accept the arguments of the same type.

JG someone at somewhere.com
Sun May 1 11:37:28 UTC 2022


On Sunday, 1 May 2022 at 11:34:49 UTC, JG wrote:
> On Sunday, 1 May 2022 at 07:59:57 UTC, Elfstone wrote:
>> On Sunday, 1 May 2022 at 06:42:26 UTC, Tejas wrote:
>>> [...]
>>
>> Thanks a lot! So this really is a D "feature".
>> The current behaviour is so broken. It makes no sense, for a 
>> language user at least.
>> I don't understand why it's not yet solved, if it's a known 
>> issue.
>
> I guess the current best is something like:
>
> ```d
> enum isVector(V) = is(V==MatrixImpl!(S,1,N),S,size_t N);
>
> @nogc
> auto dot1(V)(in V lhs, in V rhs)
> if(isVector!V) {
>     return dot2(lhs,rhs);
> }
> ```
>
> or
>
> ```d
> enum isVector(V) = is(V==MatrixImpl!(S,1,N),S,size_t N);
>
> @nogc
> auto dot1(V)(in V lhs, in V rhs)
> if(isVector!V) {
>     static if(is(V==MatrixImpl!(S,1,N),S,N)) { S ret=0; return 
> ret; }
>     static assert("This should never been shown");
> }
> ```

The static assert isn't needed.


```d
enum isVector(V) = is(V==MatrixImpl!(S,1,N),S,size_t N);

@nogc
auto dot1(V)(in V lhs, in V rhs)
if(isVector!V) {
      static if(is(V==MatrixImpl!(S,1,N),S,N)) { S ret=0; return 
ret; }
}
```



More information about the Digitalmars-d-learn mailing list