From 285b9ba2868d5cb409856ae15f59d866e1992b97 Mon Sep 17 00:00:00 2001 From: "H. S. Teoh" Date: Fri, 14 Jul 2017 11:15:48 -0700 Subject: [PATCH] Refactor std.range.chain to reduce symbol size bloat. See PR #5610 for further explanation. --- std/range/package.d | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/std/range/package.d b/std/range/package.d index cf0362ae2ab..167abea716d 100644 --- a/std/range/package.d +++ b/std/range/package.d @@ -886,18 +886,22 @@ Returns: See_Also: $(LREF only) to chain values to a range */ -auto chain(Ranges...)(Ranges rs) +template chain(Ranges...) if (Ranges.length > 0 && allSatisfy!(isInputRange, staticMap!(Unqual, Ranges)) && !is(CommonType!(staticMap!(ElementType, staticMap!(Unqual, Ranges))) == void)) { - static if (Ranges.length == 1) + auto chain(Ranges rs) { - return rs[0]; + static if (Ranges.length == 1) + return rs[0]; + else + return Result(rs); } - else + + static if (Ranges.length > 1) { - static struct Result + struct Result { private: alias R = staticMap!(Unqual, Ranges); @@ -1197,7 +1201,6 @@ if (Ranges.length > 0 && return result; } } - return Result(rs); } }