summaryrefslogtreecommitdiff
path: root/libphobos/src/std/conv.d
diff options
context:
space:
mode:
Diffstat (limited to 'libphobos/src/std/conv.d')
-rw-r--r--libphobos/src/std/conv.d32
1 files changed, 29 insertions, 3 deletions
diff --git a/libphobos/src/std/conv.d b/libphobos/src/std/conv.d
index 98df7fd1ccf..a10f4da7f9c 100644
--- a/libphobos/src/std/conv.d
+++ b/libphobos/src/std/conv.d
@@ -50,9 +50,9 @@ module std.conv;
public import std.ascii : LetterCase;
import std.meta;
-import std.range.primitives;
+import std.range;
import std.traits;
-import std.typecons : Flag, Yes, No, tuple;
+import std.typecons : Flag, Yes, No, tuple, isTuple;
// Same as std.string.format, but "self-importing".
// Helps reduce code and imports, particularly in static asserts.
@@ -653,6 +653,32 @@ if (isImplicitlyConvertible!(S, T) &&
}}
}
+// https://issues.dlang.org/show_bug.cgi?id=13551
+private T toImpl(T, S)(S value)
+if (isTuple!T)
+{
+ T t;
+ static foreach (i; 0 .. T.length)
+ {
+ t[i] = value[i].to!(typeof(T[i]));
+ }
+ return t;
+}
+
+@safe unittest
+{
+ import std.typecons : Tuple;
+
+ auto test = ["10", "20", "30"];
+ assert(test.to!(Tuple!(int, int, int)) == Tuple!(int, int, int)(10, 20, 30));
+
+ auto test1 = [1, 2];
+ assert(test1.to!(Tuple!(int, int)) == Tuple!(int, int)(1, 2));
+
+ auto test2 = [1.0, 2.0, 3.0];
+ assert(test2.to!(Tuple!(int, int, int)) == Tuple!(int, int, int)(1, 2, 3));
+}
+
/*
Converting static arrays forwards to their dynamic counterparts.
*/
@@ -1970,7 +1996,7 @@ if (isInputRange!S && isSomeChar!(ElementEncodingType!S) &&
/// ditto
private T toImpl(T, S)(S value, uint radix)
-if (isInputRange!S && !isInfinite!S && isSomeChar!(ElementEncodingType!S) &&
+if (isSomeFiniteCharInputRange!S &&
isIntegral!T && is(typeof(parse!T(value, radix))))
{
scope(success)