From 5d9cc8295012d944510df1063a69ddb57dac4ad9 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Thu, 24 Sep 2026 12:39:45 +0200 Subject: [PATCH] refactor: use front where applicable --- doc/tutorial/05_ranges/index.md | 2 +- doc/tutorial/05_ranges/range_snippets.cpp | 6 ++--- doc/tutorial/05_ranges/range_solution1.cpp | 2 +- .../sequence_file_move_record.cpp | 2 +- .../sequence_file_record_type.cpp | 2 +- include/seqan3/utility/views/repeat.hpp | 4 ++-- .../test/range/container_test_template.hpp | 6 ++--- ...nt_score_matrix_one_column_banded_test.cpp | 2 +- ...alignment_score_matrix_one_column_test.cpp | 2 +- ...lignment_trace_matrix_full_banded_test.cpp | 2 +- .../alignment_trace_matrix_full_test.cpp | 2 +- .../pairwise/alignment_configurator_test.cpp | 2 +- .../container/bitpacked_sequence_test.cpp | 2 +- .../container/container_of_container_test.cpp | 8 +++---- test/unit/io/sam_file/format_bam_test.cpp | 4 ++-- test/unit/io/sam_file/format_sam_test.cpp | 12 +++++----- .../sam_file_format_test_template.hpp | 24 +++++++++---------- .../utility/container/dynamic_bitset_test.cpp | 6 ++--- .../utility/container/small_string_test.cpp | 6 ++--- .../utility/views/pairwise_combine_test.cpp | 6 ++--- test/unit/utility/views/repeat_n_test.cpp | 6 ++--- test/unit/utility/views/repeat_test.cpp | 8 +++---- test/unit/utility/views/zip_test.cpp | 6 ++--- 23 files changed, 61 insertions(+), 61 deletions(-) diff --git a/doc/tutorial/05_ranges/index.md b/doc/tutorial/05_ranges/index.md index 1cde67ef79..f3823f657e 100644 --- a/doc/tutorial/05_ranges/index.md +++ b/doc/tutorial/05_ranges/index.md @@ -164,7 +164,7 @@ remaining (even) values, i.e. std::vector vec{1, 2, 3, 4, 5, 6}; auto v = vec | // ...? -std::cout << *v.begin() << '\n'; // should print 4 +std::cout << v.front() << '\n'; // should print 4 ``` \endassignment \solution diff --git a/doc/tutorial/05_ranges/range_snippets.cpp b/doc/tutorial/05_ranges/range_snippets.cpp index 1f4e32d2c0..9b33433fb6 100644 --- a/doc/tutorial/05_ranges/range_snippets.cpp +++ b/doc/tutorial/05_ranges/range_snippets.cpp @@ -17,7 +17,7 @@ int main() //![rev_def] //![def] - std::cout << *v.begin() << '\n'; + std::cout << v.front() << '\n'; //![all] } @@ -27,9 +27,9 @@ int main() std::vector vec{1, 2, 3, 4, 5, 6}; auto v = vec | std::views::reverse | std::views::drop(2); - std::cout << *v.begin() << '\n'; + std::cout << v.front() << '\n'; //![piped] - *v.begin() = 42; // now vec == {1, 2, 3, 42, 5, 6 } !! + v.front() = 42; // now vec == {1, 2, 3, 42, 5, 6 } !! //![assign_through] } } diff --git a/doc/tutorial/05_ranges/range_solution1.cpp b/doc/tutorial/05_ranges/range_solution1.cpp index ff7714a915..0862313b33 100644 --- a/doc/tutorial/05_ranges/range_solution1.cpp +++ b/doc/tutorial/05_ranges/range_solution1.cpp @@ -21,5 +21,5 @@ int main() return i * i; }); - std::cout << *v.begin() << '\n'; // prints 4 + std::cout << v.front() << '\n'; // prints 4 } diff --git a/doc/tutorial/07_sequence_file/sequence_file_move_record.cpp b/doc/tutorial/07_sequence_file/sequence_file_move_record.cpp index df79e71ae6..01dc61a110 100644 --- a/doc/tutorial/07_sequence_file/sequence_file_move_record.cpp +++ b/doc/tutorial/07_sequence_file/sequence_file_move_record.cpp @@ -14,6 +14,6 @@ int main() seqan3::sequence_file_input fin{std::filesystem::current_path() / "my.fastq"}; using record_type = typename decltype(fin)::record_type; - record_type rec = std::move(*fin.begin()); // avoid copying + record_type rec = std::move(fin.front()); // avoid copying } //![main] diff --git a/doc/tutorial/07_sequence_file/sequence_file_record_type.cpp b/doc/tutorial/07_sequence_file/sequence_file_record_type.cpp index 60e2b992c7..ddeb8f6470 100644 --- a/doc/tutorial/07_sequence_file/sequence_file_record_type.cpp +++ b/doc/tutorial/07_sequence_file/sequence_file_record_type.cpp @@ -14,6 +14,6 @@ int main() using record_type = typename decltype(fin)::record_type; // Because `fin` is a range, we can access the first element by dereferencing fin.begin() - record_type rec = *fin.begin(); + record_type rec = fin.front(); } //![main] diff --git a/include/seqan3/utility/views/repeat.hpp b/include/seqan3/utility/views/repeat.hpp index 468348b5c4..7484dd0153 100644 --- a/include/seqan3/utility/views/repeat.hpp +++ b/include/seqan3/utility/views/repeat.hpp @@ -178,13 +178,13 @@ class repeat_view : public std::ranges::view_interface> */ constexpr const_reference operator[](difference_type const SEQAN3_DOXYGEN_ONLY(n)) const noexcept { - return *single_value.begin(); + return single_value.front(); } //!\copydoc operator[]() constexpr reference operator[](difference_type const SEQAN3_DOXYGEN_ONLY(n)) noexcept { - return *single_value.begin(); + return single_value.front(); } //!} diff --git a/test/include/seqan3/test/range/container_test_template.hpp b/test/include/seqan3/test/range/container_test_template.hpp index eb1bf2675c..80d80fc92a 100644 --- a/test/include/seqan3/test/range/container_test_template.hpp +++ b/test/include/seqan3/test/range/container_test_template.hpp @@ -102,9 +102,9 @@ TYPED_TEST_P(container_over_dna4_test, iterators) TypeParam const t2{'A'_dna4, 'C'_dna4, 'C'_dna4, 'G'_dna4, 'T'_dna4}; // begin - EXPECT_EQ(*t1.begin(), 'A'_dna4); + EXPECT_EQ(t1.front(), 'A'_dna4); EXPECT_EQ(*t1.cbegin(), 'A'_dna4); - EXPECT_EQ(*t2.begin(), 'A'_dna4); + EXPECT_EQ(t2.front(), 'A'_dna4); EXPECT_EQ(*t2.cbegin(), 'A'_dna4); // end and arithmetic @@ -117,7 +117,7 @@ TYPED_TEST_P(container_over_dna4_test, iterators) EXPECT_TRUE(t1.cend() == t1.end()); // mutability - *t1.begin() = 'T'_dna4; + t1.front() = 'T'_dna4; EXPECT_RANGE_EQ(t1, "TCCGT"_dna4); } diff --git a/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_banded_test.cpp b/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_banded_test.cpp index 57218849a4..d5425e39c9 100644 --- a/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_banded_test.cpp +++ b/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_banded_test.cpp @@ -65,7 +65,7 @@ struct iterator_fixture : alignment_matrix_base_test template static void expect_eq(lhs_t lhs, rhs_t rhs) { - EXPECT_EQ((*lhs.begin()).current, rhs); + EXPECT_EQ(lhs.front().current, rhs); } }; diff --git a/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_test.cpp b/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_test.cpp index 905c8cb809..1fc16ff7d8 100644 --- a/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_test.cpp +++ b/test/unit/alignment/matrix/detail/alignment_score_matrix_one_column_test.cpp @@ -56,7 +56,7 @@ struct iterator_fixture : alignment_matrix_base_test template static void expect_eq(lhs_t lhs, rhs_t rhs) { - EXPECT_EQ((*lhs.begin()).current, rhs); + EXPECT_EQ(lhs.front().current, rhs); } }; diff --git a/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_banded_test.cpp b/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_banded_test.cpp index c330aae0b3..15e8fe0667 100644 --- a/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_banded_test.cpp +++ b/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_banded_test.cpp @@ -62,7 +62,7 @@ struct iterator_fixture> : alignment_matrix_base_test< template static void expect_eq(lhs_t lhs, rhs_t rhs) { - test(*lhs.begin(), rhs); + test(lhs.front(), rhs); } }; diff --git a/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_test.cpp b/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_test.cpp index b98121d35a..8c9de55d69 100644 --- a/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_test.cpp +++ b/test/unit/alignment/matrix/detail/alignment_trace_matrix_full_test.cpp @@ -61,7 +61,7 @@ struct iterator_fixture> : alignment_matrix_base_test< template static void expect_eq(lhs_t lhs, rhs_t rhs) { - test(*lhs.begin(), rhs); + test(lhs.front(), rhs); } }; diff --git a/test/unit/alignment/pairwise/alignment_configurator_test.cpp b/test/unit/alignment/pairwise/alignment_configurator_test.cpp index c8527368a1..5ed44b9c87 100644 --- a/test/unit/alignment/pairwise/alignment_configurator_test.cpp +++ b/test/unit/alignment/pairwise/alignment_configurator_test.cpp @@ -35,7 +35,7 @@ auto run_test(config_t const & cfg) using alignment_result_t = typename traits_t::alignment_result_type; alignment_result_t align_result{}; - algorithm(*indexed_sequence_pairs.begin(), + algorithm(indexed_sequence_pairs.front(), [&](auto && res) mutable { align_result = std::forward(res); diff --git a/test/unit/alphabet/container/bitpacked_sequence_test.cpp b/test/unit/alphabet/container/bitpacked_sequence_test.cpp index 15a5fcde96..d55ba2f5aa 100644 --- a/test/unit/alphabet/container/bitpacked_sequence_test.cpp +++ b/test/unit/alphabet/container/bitpacked_sequence_test.cpp @@ -25,7 +25,7 @@ TEST(bitpacked_sequence_test, issue1743_complement_on_proxy) { seqan3::bitpacked_sequence v{'A'_dna4}; - auto proxy = *v.begin(); + auto proxy = v.front(); auto complement = seqan3::complement(proxy); EXPECT_SAME_TYPE(decltype(complement), seqan3::dna4); diff --git a/test/unit/alphabet/container/container_of_container_test.cpp b/test/unit/alphabet/container/container_of_container_test.cpp index 22cd1e2a1b..d5fedf586a 100644 --- a/test/unit/alphabet/container/container_of_container_test.cpp +++ b/test/unit/alphabet/container/container_of_container_test.cpp @@ -96,9 +96,9 @@ TYPED_TEST(container_of_container, iterators) TypeParam const t2{"ACGT"_dna4, "ACGT"_dna4, "GAGGA"_dna4}; // begin - EXPECT_RANGE_EQ(*t1.begin(), "ACGT"_dna4); + EXPECT_RANGE_EQ(t1.front(), "ACGT"_dna4); EXPECT_RANGE_EQ(*t1.cbegin(), "ACGT"_dna4); - EXPECT_RANGE_EQ(*t2.begin(), "ACGT"_dna4); + EXPECT_RANGE_EQ(t2.front(), "ACGT"_dna4); EXPECT_RANGE_EQ(*t2.cbegin(), "ACGT"_dna4); // end and arithmetic @@ -111,8 +111,8 @@ TYPED_TEST(container_of_container, iterators) EXPECT_TRUE(t1.cend() == t1.end()); // writability - (*t1.begin())[0] = 'T'_dna4; - EXPECT_RANGE_EQ(*t1.begin(), "TCGT"_dna4); + t1.front()[0] = 'T'_dna4; + EXPECT_RANGE_EQ(t1.front(), "TCGT"_dna4); } TYPED_TEST(container_of_container, element_access) diff --git a/test/unit/io/sam_file/format_bam_test.cpp b/test/unit/io/sam_file/format_bam_test.cpp index 32a08e93be..a1645b8007 100644 --- a/test/unit/io/sam_file/format_bam_test.cpp +++ b/test/unit/io/sam_file/format_bam_test.cpp @@ -591,8 +591,8 @@ TEST_F(bam_format, too_long_cigar_string_read) seqan3::sam_file_input fin{stream, this->ref_ids, this->ref_sequences, seqan3::format_bam{}}; - EXPECT_RANGE_EQ((*fin.begin()).cigar_sequence(), this->cigars[0]); - EXPECT_EQ((*fin.begin()).tags().size(), 0u); // redundant CG tag is removed + EXPECT_RANGE_EQ(fin.front().cigar_sequence(), this->cigars[0]); + EXPECT_EQ(fin.front().tags().size(), 0u); // redundant CG tag is removed } { // error: sam_tag_dictionary is not read diff --git a/test/unit/io/sam_file/format_sam_test.cpp b/test/unit/io/sam_file/format_sam_test.cpp index ed798319b1..5764e5bee8 100644 --- a/test/unit/io/sam_file/format_sam_test.cpp +++ b/test/unit/io/sam_file/format_sam_test.cpp @@ -276,7 +276,7 @@ TEST_F(sam_format, no_hd_line_in_header) std::istringstream istream{std::string{"@SQ\tSN:ref\tLN:34\nread1\t41\tref\t1\t61\t*\tref\t10\t300\tACGT\t!##$\n"}}; seqan3::sam_file_input fin{istream, seqan3::format_sam{}, seqan3::fields{}}; - EXPECT_EQ((*fin.begin()).id(), std::string{"read1"}); + EXPECT_EQ(fin.front().id(), std::string{"read1"}); } TEST_F(sam_format, windows_file) @@ -284,7 +284,7 @@ TEST_F(sam_format, windows_file) std::istringstream istream(std::string("read1\t41\tref\t1\t61\t*\tref\t10\t300\tACGT\t!##$\r\n")); seqan3::sam_file_input fin{istream, seqan3::format_sam{}, seqan3::fields{}}; - EXPECT_EQ((*fin.begin()).id(), std::string{"read1"}); + EXPECT_EQ(fin.front().id(), std::string{"read1"}); } TEST_F(sam_format, format_error_illegal_character_in_seq) @@ -412,8 +412,8 @@ TEST_F(sam_format, issue2195) using seqan3::operator""_phred42; std::vector expected_quality = "*9<9;"_phred42; - EXPECT_RANGE_EQ((*fin.begin()).id(), std::string{"*r1"}); - EXPECT_RANGE_EQ((*fin.begin()).base_qualities(), expected_quality); + EXPECT_RANGE_EQ(fin.front().id(), std::string{"*r1"}); + EXPECT_RANGE_EQ(fin.front().base_qualities(), expected_quality); } { @@ -423,7 +423,7 @@ TEST_F(sam_format, issue2195) using seqan3::operator""_phred42; std::vector expected_quality = "*1"_phred42; - EXPECT_RANGE_EQ((*fin.begin()).id(), std::string{""}); - EXPECT_RANGE_EQ((*fin.begin()).base_qualities(), expected_quality); + EXPECT_RANGE_EQ(fin.front().id(), std::string{""}); + EXPECT_RANGE_EQ(fin.front().base_qualities(), expected_quality); } } diff --git a/test/unit/io/sam_file/sam_file_format_test_template.hpp b/test/unit/io/sam_file/sam_file_format_test_template.hpp index 57b0c0414f..27100576b8 100644 --- a/test/unit/io/sam_file/sam_file_format_test_template.hpp +++ b/test/unit/io/sam_file/sam_file_format_test_template.hpp @@ -252,18 +252,18 @@ TYPED_TEST_P(sam_file_read, read_in_all_but_empty_data) typename TestFixture::stream_type istream{this->empty_input}; seqan3::sam_file_input fin{istream, this->ref_ids, this->ref_sequences, TypeParam{}}; - EXPECT_TRUE((*fin.begin()).sequence().empty()); - EXPECT_TRUE((*fin.begin()).id().empty()); - EXPECT_TRUE((*fin.begin()).base_qualities().empty()); - EXPECT_TRUE((*fin.begin()).cigar_sequence().empty()); - EXPECT_TRUE(!(*fin.begin()).reference_id().has_value()); - EXPECT_TRUE(!(*fin.begin()).reference_position().has_value()); - EXPECT_EQ((*fin.begin()).flag(), seqan3::sam_flag{0u}); - EXPECT_EQ((*fin.begin()).mapping_quality(), 0u); - EXPECT_TRUE(!(*fin.begin()).mate_reference_id().has_value()); - EXPECT_TRUE(!(*fin.begin()).mate_position().has_value()); - EXPECT_EQ((*fin.begin()).template_length(), int32_t{}); - EXPECT_TRUE((*fin.begin()).tags().empty()); + EXPECT_TRUE(fin.front().sequence().empty()); + EXPECT_TRUE(fin.front().id().empty()); + EXPECT_TRUE(fin.front().base_qualities().empty()); + EXPECT_TRUE(fin.front().cigar_sequence().empty()); + EXPECT_TRUE(!fin.front().reference_id().has_value()); + EXPECT_TRUE(!fin.front().reference_position().has_value()); + EXPECT_EQ(fin.front().flag(), seqan3::sam_flag{0u}); + EXPECT_EQ(fin.front().mapping_quality(), 0u); + EXPECT_TRUE(!fin.front().mate_reference_id().has_value()); + EXPECT_TRUE(!fin.front().mate_position().has_value()); + EXPECT_EQ(fin.front().template_length(), int32_t{}); + EXPECT_TRUE(fin.front().tags().empty()); } TYPED_TEST_P(sam_file_read, read_in_almost_nothing) diff --git a/test/unit/utility/container/dynamic_bitset_test.cpp b/test/unit/utility/container/dynamic_bitset_test.cpp index 292919877e..2ac10d8c41 100644 --- a/test/unit/utility/container/dynamic_bitset_test.cpp +++ b/test/unit/utility/container/dynamic_bitset_test.cpp @@ -510,9 +510,9 @@ constexpr bool iterator_test() seqan3::dynamic_bitset t1{0b1111'0001'0000'1100}; seqan3::dynamic_bitset const t2{0b1010'0001'0000'0011}; - bool res = !*t1.begin(); + bool res = !t1.front(); res &= !*t1.cbegin(); - res &= *t2.begin(); + res &= t2.front(); res &= *t2.cbegin(); res &= *(t1.end() - 1); @@ -522,7 +522,7 @@ constexpr bool iterator_test() res &= t1.end() == t1.cend(); - *t1.begin() = true; + t1.front() = true; res &= t1 == seqan3::dynamic_bitset{0b1111'0001'0000'1101}; return res; diff --git a/test/unit/utility/container/small_string_test.cpp b/test/unit/utility/container/small_string_test.cpp index 0bd0820470..b8c4ad64a2 100644 --- a/test/unit/utility/container/small_string_test.cpp +++ b/test/unit/utility/container/small_string_test.cpp @@ -164,18 +164,18 @@ TEST(small_string, concat) TEST(small_string, begin) { seqan3::small_string s{"hello"}; - EXPECT_EQ(*s.begin(), 'h'); + EXPECT_EQ(s.front(), 'h'); EXPECT_TRUE((std::is_same_v)); seqan3::small_string<5> const cs{s}; - EXPECT_EQ(*cs.begin(), 'h'); + EXPECT_EQ(cs.front(), 'h'); EXPECT_TRUE((std::is_same_v)); } TEST(small_string, cbegin) { seqan3::small_string s{"hello"}; - EXPECT_EQ(*s.begin(), 'h'); + EXPECT_EQ(s.front(), 'h'); EXPECT_TRUE((std::is_same_v)); } diff --git a/test/unit/utility/views/pairwise_combine_test.cpp b/test/unit/utility/views/pairwise_combine_test.cpp index ec8aadf9be..e22e059b5b 100644 --- a/test/unit/utility/views/pairwise_combine_test.cpp +++ b/test/unit/utility/views/pairwise_combine_test.cpp @@ -382,8 +382,8 @@ TYPED_TEST(pairwise_combine_test, begin) auto v = this->create_view(); auto const cv{v}; - EXPECT_EQ(*v.begin(), (std::tuple{'a', 'b'})); - EXPECT_EQ(*cv.begin(), (std::tuple{'a', 'b'})); + EXPECT_EQ(v.front(), (std::tuple{'a', 'b'})); + EXPECT_EQ(cv.front(), (std::tuple{'a', 'b'})); EXPECT_EQ(*std::ranges::cbegin(v), (std::tuple{'a', 'b'})); } @@ -503,7 +503,7 @@ TEST(pairwise_combine_fn_test, output) std::vector orig{'a', 'b', 'c', 'd'}; auto v = orig | seqan3::views::pairwise_combine; - *v.begin() = std::tuple{'x', 'y'}; + v.front() = std::tuple{'x', 'y'}; auto it = v.begin(); EXPECT_EQ(*it, (std::tuple{'x', 'y'})); diff --git a/test/unit/utility/views/repeat_n_test.cpp b/test/unit/utility/views/repeat_n_test.cpp index 97191cd1cf..0871e053ab 100644 --- a/test/unit/utility/views/repeat_n_test.cpp +++ b/test/unit/utility/views/repeat_n_test.cpp @@ -67,7 +67,7 @@ TEST(view, factory) std::string str{"foobar"}; auto v = seqan3::views::repeat_n(str, 2); EXPECT_EQ(v.size(), 2u); - EXPECT_EQ(*v.begin(), str); + EXPECT_EQ(v.front(), str); EXPECT_EQ(v[0], str); } @@ -76,7 +76,7 @@ TEST(view, factory) std::string str{"foobar"}; auto view = str | std::views::take(3); auto v = seqan3::views::repeat_n(view, 5); - EXPECT_RANGE_EQ(*v.begin(), std::string{"foo"}); + EXPECT_RANGE_EQ(v.front(), std::string{"foo"}); } // combinability @@ -98,7 +98,7 @@ constexpr char constexpr_view() auto v = seqan3::views::repeat_n(chr, 10); v[0] = 'X'; - return *v.begin(); + return v.front(); } TEST(general, constexpr_context) diff --git a/test/unit/utility/views/repeat_test.cpp b/test/unit/utility/views/repeat_test.cpp index 6c5c613392..630294773d 100644 --- a/test/unit/utility/views/repeat_test.cpp +++ b/test/unit/utility/views/repeat_test.cpp @@ -137,14 +137,14 @@ TEST(view, factory) { char const chr{'X'}; auto v = seqan3::views::repeat(chr); - EXPECT_EQ(*v.begin(), chr); + EXPECT_EQ(v.front(), chr); } // string { std::string str{"foobar"}; auto v = seqan3::views::repeat(str); - EXPECT_EQ(*v.begin(), str); + EXPECT_EQ(v.front(), str); EXPECT_EQ(v[2345], str); } @@ -153,7 +153,7 @@ TEST(view, factory) std::string const input{"foobar"}; auto view = std::views::take(input, 3); auto v = seqan3::views::repeat(view); - EXPECT_RANGE_EQ(*v.begin(), view); + EXPECT_RANGE_EQ(v.front(), view); } // combinability @@ -191,7 +191,7 @@ constexpr char constexpr_view() auto v = seqan3::views::repeat(chr); v[1324] = 'X'; - return *v.begin(); + return v.front(); } TEST(general, constexpr_context) diff --git a/test/unit/utility/views/zip_test.cpp b/test/unit/utility/views/zip_test.cpp index afabda08e2..2bf4561100 100644 --- a/test/unit/utility/views/zip_test.cpp +++ b/test/unit/utility/views/zip_test.cpp @@ -192,9 +192,9 @@ TEST_F(zip_test, alignment_usage_2) TEST_F(zip_test, use_as_output_range) { auto zip_view = zip_common_range(); - *zip_view.begin() = std::pair(23, "FF"); - EXPECT_EQ(std::get<0>(*zip_view.begin()), 23); - EXPECT_EQ(std::get<1>(*zip_view.begin()), "FF"); + zip_view.front() = std::pair(23, "FF"); + EXPECT_EQ(std::get<0>(zip_view.front()), 23); + EXPECT_EQ(std::get<1>(zip_view.front()), "FF"); size_t i{1u}; for (auto && [elem_1, elem_2] : zip_view | std::views::drop(1))