On 10.10.2021 18:01, Elmar wrote:
Well, I just wondered why your code would compile and mine wouldn't. The
`version(all)` variant will not compile on my computer with `rdmd`
because `PointerTarget` only allows pointers.
It depends on compiler version. This variant is compiled on version
2.092.1 and above
But the 2nd one will compile. The `is()` expression catches the
compilation error which is nice. This is sufficient:
```d
enum isPointedStaticArray(T) = is(PointerTarget!T : P[N], P, size_t N);
```
It would be nice if one could use pattern-matching for it in D. Is this
possible?
```d
enum isPointedStaticArray(X : P*, P) =
.isStaticArray!(PointerTarget!X);
enum isPointedStaticArray(X : else) = false;
```
As I know it's impossible, but you can use a regular template:
```d
template isPointedStaticArray(T)
{
static if (isPointer!T)
enum isPointedStaticArray = isStaticArray!(PointerTarget!T);
else
enum isPointedStaticArray = false;
}
```
https://run.dlang.io/is/lR7feP
this compiles from 2.086.1 and above