Skip to content

Commit

Permalink
fix isDynamicArray and DynamicArrayTypeOf
Browse files Browse the repository at this point in the history
  • Loading branch information
9rnsr committed Nov 27, 2012
1 parent 965fc86 commit 158275c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 11 deletions.
2 changes: 1 addition & 1 deletion std/format.d
Expand Up @@ -1703,7 +1703,7 @@ unittest // Test for issue 8310
$(LI Const array is converted to input range by removing its qualifier.))
*/
void formatValue(Writer, T, Char)(Writer w, T obj, ref FormatSpec!Char f)
if (isDynamicArray!T && !is(StringTypeOf!T) && !is(T == enum) && !hasToString!(T, Char))
if (is(DynamicArrayTypeOf!T) && !is(StringTypeOf!T) && !is(T == enum) && !hasToString!(T, Char))
{
static if (is(const(ArrayTypeOf!T) == const(void[])))
{
Expand Down
28 changes: 18 additions & 10 deletions std/traits.d
Expand Up @@ -3836,7 +3836,8 @@ template DynamicArrayTypeOf(T)

static if (is(T == enum))
alias .DynamicArrayTypeOf!(OriginalType!T) DynamicArrayTypeOf;
else static if (is(typeof(idx(defaultInit!T)) X))
else static if (!is(StaticArrayTypeOf!T) &&
is(typeof(idx(defaultInit!T)) X))
{
alias typeof(defaultInit!T[0]) E;

Expand Down Expand Up @@ -3868,6 +3869,10 @@ unittest
static assert(is( Q!(P!(T[])) == DynamicArrayTypeOf!( Q!(SubTypeOf!(P!(T[]))) ) ));
}
}

static assert(!is(DynamicArrayTypeOf!(int[3])));
static assert(!is(DynamicArrayTypeOf!(void[3])));
static assert(!is(DynamicArrayTypeOf!(typeof(null))));
}

/*
Expand Down Expand Up @@ -4292,21 +4297,24 @@ unittest
}

/**
* Detect whether type T is a dynamic array.
* Detect whether type $(D T) is a dynamic array.
*/
template isDynamicArray(T, U = void)
{
enum bool isDynamicArray = false;
}

template isDynamicArray(T : U[], U)
template isDynamicArray(T)
{
enum bool isDynamicArray = !isStaticArray!T;
enum isDynamicArray = is(DynamicArrayTypeOf!T) && !isAggregateType!T;
}

unittest
{
static assert( isDynamicArray!(int[]));
foreach (T; TypeTuple!(int[], char[], string, long[3][], double[string][]))
{
foreach (Q; TypeQualifierList)
{
static assert( isDynamicArray!( Q!T ));
static assert(!isDynamicArray!( SubTypeOf!(Q!T) ));
}
}

static assert(!isDynamicArray!(int[5]));
static assert(!isDynamicArray!(typeof(null)));

Expand Down

0 comments on commit 158275c

Please sign in to comment.