diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-12-09 18:59:38 +0100 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-12-11 17:17:58 +0100 |
commit | 6d799f0aed18be25a5c908499b6411ab6d06b78c (patch) | |
tree | 3e6a91048c7fe3e78bae9f75b24eb37c5504681b /libphobos/src/std/range/package.d | |
parent | cc7f509d3c0b3ab63891cf7ca2def0fdfb3642c4 (diff) | |
download | gcc-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.d | 26 |
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). |