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)

Reply via email to