From f119dd3e7ce03f803a2e42846ca4b3e3731297f5 Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Sun, 14 Sep 2025 02:52:11 +0800 Subject: [PATCH] [libc++][test] Clean-up `MinSequenceContainer` - Guard range-related functions with `TEST_STD_VER >= 23`. - Mark range-related funcitons unconditionally `constexpr`. - Add `TEST_CONSTEXPR_CXX20` to one `operator=`. This will make `MinSequenceContainer` more consistent and useful for legacy container adaptors or C++26 `constexpr` additions. Although we're currently only using it with flat container adaptors. --- libcxx/test/support/MinSequenceContainer.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 8433ebb39160c..f9e67cd726eb7 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -29,12 +29,13 @@ struct MinSequenceContainer { template explicit TEST_CONSTEXPR_CXX20 MinSequenceContainer(It first, It last) : data_(first, last) {} TEST_CONSTEXPR_CXX20 MinSequenceContainer(std::initializer_list il) : data_(il) {} +#if TEST_STD_VER >= 23 template - TEST_CONSTEXPR_CXX20 MinSequenceContainer(std::from_range_t, Range&& rg) - : data_(std::from_range, std::forward(rg)) {} + constexpr MinSequenceContainer(std::from_range_t, Range&& rg) : data_(std::from_range, std::forward(rg)) {} +#endif TEST_CONSTEXPR_CXX20 MinSequenceContainer(size_type n, T value) : data_(n, value) {} - MinSequenceContainer& operator=(std::initializer_list il) { data_ = il; } + TEST_CONSTEXPR_CXX20 MinSequenceContainer& operator=(std::initializer_list il) { data_ = il; } template TEST_CONSTEXPR_CXX20 void assign(It first, It last) { @@ -42,10 +43,12 @@ struct MinSequenceContainer { } TEST_CONSTEXPR_CXX20 void assign(std::initializer_list il) { data_.assign(il); } TEST_CONSTEXPR_CXX20 void assign(size_type n, value_type t) { data_.assign(n, t); } +#if TEST_STD_VER >= 23 template - TEST_CONSTEXPR_CXX20 void assign_range(Range&& rg) { + constexpr void assign_range(Range&& rg) { data_.assign_range(std::forward(rg)); } +#endif TEST_CONSTEXPR_CXX20 iterator begin() { return iterator(data_.data()); } TEST_CONSTEXPR_CXX20 const_iterator begin() const { return const_iterator(data_.data()); } TEST_CONSTEXPR_CXX20 const_iterator cbegin() const { return const_iterator(data_.data()); } @@ -73,10 +76,12 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), il)); } +#if TEST_STD_VER >= 23 template - TEST_CONSTEXPR_CXX20 iterator insert_range(const_iterator p, Range&& rg) { + constexpr iterator insert_range(const_iterator p, Range&& rg) { return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); } +#endif TEST_CONSTEXPR_CXX20 iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last)));