On Saturday, 19 March 2022 at 11:47:53 UTC, Stanislav Blinov
wrote:
No.
First of all Thanks for the reply. The answer "No" is a wonder to
me. Because, from my point of view, `U` is coming from nowhere.
My understanding is, we can use any parameter of a template
inside the template. So in this case `U` is not in the parameter
list. It is suddenly appearing in that `static if`.
The test is not `T t == U[]`. It is `is(T t == U[], U)`.
Okay, I understand.
Actually, the lower case `t` is not needed there, you can
simply write `is(T == U[], U)`.
So the `T` is not the type. It's the parameter. Right ? So a
template doesn't need a type. Only the parameter, right ? (I
think I am too dumb to ask this. Please forgive me.)
Yes, and `U` then becomes `int[][]`. Which is why the template
recurses down and instantiates itself with `U`, until `T` fails
the test.
In order to understand this, I need to understand from where the
`U` comes.