On Saturday, 19 March 2022 at 05:54:26 UTC, Vinod K Chandran wrote:

Question 1 - `U` is appearing in the first static if statement. But we had to write `U` on the template line, right? Like - `template rank(T, U)`

No.

Question 2 - The statif if test is - `T t == U[ ]` What does that mean ?

The test is not `T t == U[]`. It is `is(T t == U[], U)`.

https://dlang.org/spec/expression.html#is-identifier-equal

```
is ( Type Identifier == TypeSpecialization )

The condition is satisfied if Type is semantically correct and is the same as TypeSpecialization. The Identifier is declared to be either an alias of the TypeSpecialization or, if TypeSpecialization is dependent on Identifier, the deduced type.
```

You simply introduce new identifiers. Basically, the test means "is T an array of some type which I would like referred to as U?". Actually, the lower case `t` is not needed there, you can simply write `is(T == U[], U)`.

Question 3 - if `T t == U[ ]` is the test, then I think when we pass
```d
rank!(int[ ][ ][ ])
```
The test will be `int[ ][ ][ ] == U[ ]`, Right ?

Yes, and `U` then becomes `int[][]`. Which is why the template recurses down and instantiates itself with `U`, until `T` fails the test.

Reply via email to