[llvm] [ADT] Make Zippy more iterator-like for lifetime safety (PR #112441)
Jakub Kuderski via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 16 06:27:57 PDT 2024
================
@@ -704,10 +704,12 @@ struct zip_common : public zip_traits<ZipType, ReferenceTupleType, Iters...> {
using value_type = typename Base::value_type;
std::tuple<Iters...> iterators;
+ mutable std::optional<value_type> value;
protected:
- template <size_t... Ns> value_type deref(std::index_sequence<Ns...>) const {
- return value_type(*std::get<Ns>(iterators)...);
+ template <size_t... Ns> const value_type &deref(std::index_sequence<Ns...>) const {
+ value.emplace(*std::get<Ns>(iterators)...);
+ return *value;
----------------
kuhar wrote:
What's the difference between emplace and assignment here?
https://github.com/llvm/llvm-project/pull/112441
More information about the llvm-commits
mailing list