1 template StaticArrayTypeOf(T)
3 inout(U[n]) idx(U, size_t n)( inout(U[n]) );
5 /+static if (is(T == enum))
6 alias .StaticArrayTypeOf!(OriginalType!T) StaticArrayTypeOf;
7 else +/static if (is(typeof(idx(T.init/+defaultInit!T+/)) X))
8 alias X StaticArrayTypeOf;
10 static assert(0, T.stringof~" is not a static array type");
13 template DynamicArrayTypeOf(T)
15 inout(U[]) idx(U)( inout(U[]) );
17 /+static if (is(T == enum))
18 alias .DynamicArrayTypeOf!(OriginalType!T) DynamicArrayTypeOf;
19 else +/static if (!is(StaticArrayTypeOf!T) &&
20 is(typeof(idx(T.init/+defaultInit!T+/)) X))
22 alias typeof(T.init[0]/+defaultInit!T[0]+/) E;
25 const(E[]) idy( const(E[]) );
26 inout(E[]) idy( inout(E[]) );
27 shared( E[]) idy( shared( E[]) );
28 shared(const E[]) idy( shared(const E[]) );
29 shared(inout E[]) idy( shared(inout E[]) );
30 immutable(E[]) idy( immutable(E[]) );
32 alias typeof(idy(T.init/+defaultInit!T+/)) DynamicArrayTypeOf;
35 static assert(0, T.stringof~" is not a dynamic array");
38 template isDynamicArray(T)
40 enum isDynamicArray = is(DynamicArrayTypeOf!T)/+ && !isAggregateType!T+/;
45 enum bool isArray = /+isStaticArray!T || +/isDynamicArray!T;