www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Finding ElementType

reply Bastiaan Veelo <Bastiaan Veelo.net> writes:
The learn forum is great not only for asking questions, but also 
for learning from the questions by others: I just learned about 
the existence of std.range.primitives: ElementType, a function 
that I have looked for in phobos before, without finding it. I 
had expected this to be in std.traits or __traits.

So I implemented my own:
```
template arrayElementType(T : T[])
{
     alias arrayElementType = T;
}

unittest
{
     static assert (is(arrayElementType!(int[]) == int));
}
```

For reference, this is the phobos version:
```
template ElementType(R)
{
     static if (is(typeof(R.init.front.init) T))
         alias ElementType = T;
     else
         alias ElementType = void;
}
```

As far as I can see these are largely equivalent, except that the 
phobos version has special behavior for narrow strings [1]. This 
special behavior is actually unwanted in my case.

The following questions pop up:
1) Should we have a reference in the docs for std.traits to 
std.range.primitive : ElementType?
2) Should phobos contain a version without the special narrow 
string behavior?
3) Are there other differences between my version and the phobos 
version?

Thanks,
Bastiaan.

[1] https://dlang.org/phobos/std_range_primitives.html#ElementType
Jan 07
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Sunday, 7 January 2018 at 12:40:22 UTC, Bastiaan Veelo wrote:
 1) Should we have a reference in the docs for std.traits to 
 std.range.primitive : ElementType?
wouldn't hurt i guess
 2) Should phobos contain a version without the special narrow 
 string behavior?
see ElementEncodingType http://dpldocs.info/experimental-docs/std.range.primitives.ElementEncodingType.html
 3) Are there other differences between my version and the 
 phobos version?
The Phobos one works on any range, not just built-in arrays. It also returns an answer (void) if you pass it something that has no element type, whereas yours would be a compile error.
Jan 07
parent Bastiaan Veelo <Bastiaan Veelo.net> writes:
On Sunday, 7 January 2018 at 13:50:23 UTC, Adam D. Ruppe wrote:
 On Sunday, 7 January 2018 at 12:40:22 UTC, Bastiaan Veelo wrote:
 1) Should we have a reference in the docs for std.traits to 
 std.range.primitive : ElementType?
wouldn't hurt i guess
 2) Should phobos contain a version without the special narrow 
 string behavior?
see ElementEncodingType http://dpldocs.info/experimental-docs/std.range.primitives.ElementEncodingType.html
 3) Are there other differences between my version and the 
 phobos version?
The Phobos one works on any range, not just built-in arrays. It also returns an answer (void) if you pass it something that has no element type, whereas yours would be a compile error.
Thanks.
Jan 07