On 8/17/21 8:21 AM, Ferhat Kurtulmuş wrote:
Hello folks,
Hope everyone is doing fine. Considering the following code, in the
first condition, I am extracting the type Point from the slice Point[].
I searched in the std.traits, and could not find a neater solution
something like ElementTypeOf!T. Is there any neater solution for it?
Thanks in advance.
```d
static if (isArray!VecPoint){
VecPoint dummy;
alias Point = typeof(dummy[0]);
} else static if (isRandomAccessRange!VecPoint){
alias ASeq2 = TemplateArgsOf!VecPoint;
alias Point = ASeq2[0];
} else
static assert(0, typeof(VecPoint).stringof ~ " type is not
supported");
```
If you want the element type of a range (i.e. the thing returned by
`range.front`), you can use `ElementType!T` (from std.range.primitives).
This returns the element type of the range, which for every array
*except* character arrays, gives you the element type of the array.
If you want always the element type of the array, even for auto-decoded
ranges, use `ElementEncodingType!T`.
If you know it's an array, you can just use Paul's solution.
Your `isRandomAccessRange` branch seems very suspect.
-Steve