diff --git a/std/array.d b/std/array.d index 8fad2711c15..f05fc35665a 100644 --- a/std/array.d +++ b/std/array.d @@ -139,6 +139,13 @@ if (isIterable!Range && !isNarrowString!Range && !isInfinite!Range) } } +/// +ForeachType!(PointerTarget!Range)[] array(Range)(Range r) +if (isPointer!Range && isIterable!(PointerTarget!Range) && !isNarrowString!Range && !isInfinite!Range) +{ + return array(*r); +} + /// @safe pure nothrow unittest { @@ -157,6 +164,18 @@ if (isIterable!Range && !isNarrowString!Range && !isInfinite!Range) assert(equal(a, [Foo(1), Foo(2), Foo(3), Foo(4), Foo(5)])); } +@safe pure nothrow unittest +{ + struct MyRange + { + enum front = 123; + enum empty = true; + void popFront() {} + } + + static assert(__traits(compiles, (new MyRange).array)); +} + @system unittest { import std.algorithm.comparison : equal;