On Tue, Aug 25, 2020 at 03:41:06AM +0000, Jon Degenhardt via 
Digitalmars-d-learn wrote:
> What's the best way to get the element type of an array at compile
> time?
> 
> Something like std.range.ElementType except that works on any array
> type.  There is std.traits.ForeachType, but it wasn't clear if that
> was the right thing.
[...]

        alias T = ... /* the type to inspect */
        static if (is(T : E[], E)) {
                ... /* in this block, E is the element type */
        }

Or if you need to use it in another expression:

        template ArrayElemType(T) {
                static if (is(T : E[], E)) {
                        alias ArrayElemType = E;
                }
                else
                        alias ArrayElemType = void;
                        // or static assert(0) if it should be an error
        }

        int[] myArr;
        pragma(msg, ArrayElemType!(typeof(myArr))); // int

        string myStr;
        pragma(msg, ArrayElemType!(typeof(myStr))); // immutable(char)


T

-- 
The best way to destroy a cause is to defend it poorly.

Reply via email to