On Saturday, 19 March 2022 at 15:58:25 UTC, Ali Çehreli wrote:

I wrote a chapter about the is expression but it's still mysterious to me. :)

  ddili.org/ders/d.en/is_expr.html


Thanks for the reply. I think I choose the wrong book. I knew about your book but I thought this one is specially written for templates. I will read the template chapters in **`Programming in D`**.

It means "if T matches U[] and U is a type". "a type" because it is just U in the is expression list.

So as per the eponymous trick, **`enum size_t rank`** will be executed directly. Right ? But in that case, **`rank`** template doesn't take a parameter. There is only the type parameter which is **`T`**. So I am still in confusion about **`U`**.

I believe at least some of the traits have been added since that doc document was written. I would write it in a much simpler way using template constraints today:

```d
template rank(T) {
  import std.traits : isArray;
  import std.range : ElementType;

  static if (isArray!T) {
    enum size_t rank = 1 + rank!(ElementType!T);

  } else {
    enum size_t rank = 0;
  }
}
```

This template is very easy to understand and I have no confusions about it. Because, it only takes **`T`** as type parameter and there is no magical **`U`**.

However, note how the template constraints had to be repeated as isArray!T and !isArray!T in that case.

Yeah, I noted.

Not at all! The is expression is the weirdest part of D.

Oh I see.


Reply via email to