On Tuesday, 17 August 2021 at 16:24:38 UTC, Steven Schveighoffer
wrote:
void foo(T:U[L], uint L)(T a){...}
This is an invalid specification, what is U? Did you mean:
Yes, sorry typo in the forum.
void foo(T: U[L], U, uint L)(T a) {...}
void foo(T:U[L][L], uint L)(T a){...} // Never matched
Apart from another missing U, this is only a SQUARE 2d-array
(both dimensions the same), your example below only calls with
a 1x2 array.
Again, sorry a typo, calling with `[[1,2],[3,4]]`.
void foo(T:U[L], U:V[L], V uint L)(T a){...} // Never matched
(alternatively)
I don't think you need this, and I had to comment it out, or
the compiler wouldn't build.
That is correct, it's equivalent thus causes 2 matches.
All these are calling with array literals, which default to
dynamic arrays, not static arrays.
I realise that is their default, though in this scenario they
should (I believe) be used as static arrays. (This works for me
in any case)