aboutsummaryrefslogtreecommitdiff
path: root/libphobos/src/std/range/package.d
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2022-12-09 18:59:38 +0100
committerIain Buclaw <ibuclaw@gdcproject.org>2022-12-11 17:17:58 +0100
commit6d799f0aed18be25a5c908499b6411ab6d06b78c (patch)
tree3e6a91048c7fe3e78bae9f75b24eb37c5504681b /libphobos/src/std/range/package.d
parentcc7f509d3c0b3ab63891cf7ca2def0fdfb3642c4 (diff)
downloadgcc-6d799f0aed18be25a5c908499b6411ab6d06b78c.zip
gcc-6d799f0aed18be25a5c908499b6411ab6d06b78c.tar.gz
gcc-6d799f0aed18be25a5c908499b6411ab6d06b78c.tar.bz2
d: Merge upstream dmd, druntime c8ae4adb2e, phobos 792c8b7c1.
D front-end changes: - Import dmd v2.101.0. - Deprecate the ability to call `__traits(getAttributes)' on overload sets. - Deprecate non-empty `for' statement increment clause with no effect. - Array literals assigned to `scope' array variables can now be allocated on the stack. D runtime changes: - Import druntime v2.101.0. Phobos changes: - Import phobos v2.101.0. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd c8ae4adb2e. * typeinfo.cc (check_typeinfo_type): Update for new front-end interface. (TypeInfoVisitor::visit (TypeInfoStructDeclaration *)): Remove warning that toHash() must be declared 'nothrow @safe`. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime c8ae4adb2e. * src/MERGE: Merge upstream phobos 792c8b7c1.
Diffstat (limited to 'libphobos/src/std/range/package.d')
-rw-r--r--libphobos/src/std/range/package.d26
1 files changed, 24 insertions, 2 deletions
diff --git a/libphobos/src/std/range/package.d b/libphobos/src/std/range/package.d
index 9197134..888ac1a 100644
--- a/libphobos/src/std/range/package.d
+++ b/libphobos/src/std/range/package.d
@@ -3774,10 +3774,17 @@ private:
alias fun = Fun[0];
enum returnByRef_ = (functionAttributes!fun & FunctionAttribute.ref_) ? true : false;
+
+ import std.traits : hasIndirections;
+ static if (!hasIndirections!(ReturnType!fun))
+ alias RetType = Unqual!(ReturnType!fun);
+ else
+ alias RetType = ReturnType!fun;
+
static if (returnByRef_)
- ReturnType!fun *elem_;
+ RetType *elem_;
else
- ReturnType!fun elem_;
+ RetType elem_;
public:
/// Range primitives
enum empty = false;
@@ -3866,6 +3873,13 @@ public:
assert(g.front == f + 5);
}
+// https://issues.dlang.org/show_bug.cgi?id=23319
+@safe pure nothrow unittest
+{
+ auto b = generate!(() => const(int)(42));
+ assert(b.front == 42);
+}
+
/**
Repeats the given forward range ad infinitum. If the original range is
infinite (fact that would make `Cycle` the identity application),
@@ -6856,6 +6870,7 @@ if (!isIntegral!(CommonType!(B, E)) &&
assert(!empty);
++current;
}
+ @property auto save() { return this; }
}
return Result(begin, end);
}
@@ -6890,6 +6905,13 @@ if (!isIntegral!(CommonType!(B, E)) &&
assert(i2.equal([3, 4, 0, 1 ]));
}
+// https://issues.dlang.org/show_bug.cgi?id=23453
+@safe unittest
+{
+ auto r = iota('a', 'z');
+ static assert(isForwardRange!(typeof(r)));
+}
+
/**
Options for the $(LREF FrontTransversal) and $(LREF Transversal) ranges
(below).