From d99dbf2049b0e62cd3cb9e2e5935c9fe7ff2f0bb Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Mon, 19 Oct 2026 22:28:45 +0200 Subject: [PATCH] fix(static_vector): return iterator following erased range --- include/stdexec/__detail/__static_vector.hpp | 2 +- test/stdexec/detail/test_utility.cpp | 25 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/stdexec/__detail/__static_vector.hpp b/include/stdexec/__detail/__static_vector.hpp index e336eadfb..d07abc6ef 100644 --- a/include/stdexec/__detail/__static_vector.hpp +++ b/include/stdexec/__detail/__static_vector.hpp @@ -169,7 +169,7 @@ namespace STDEXEC std::move(const_cast(__last), end(), const_cast(__first)); resize(size() - (__last - __first)); } - return end(); + return const_cast(__first); } std::size_t __size_ = 0; diff --git a/test/stdexec/detail/test_utility.cpp b/test/stdexec/detail/test_utility.cpp index 40f8fd98d..84252b744 100644 --- a/test/stdexec/detail/test_utility.cpp +++ b/test/stdexec/detail/test_utility.cpp @@ -22,6 +22,7 @@ import std; import stdexec; #else # include +# include # include #endif @@ -78,4 +79,28 @@ namespace static_assert(is_same_v<__minvoke<__munique<__msort<>>>, __mlist<>>); } +#if !STDEXEC_USE_MODULES() + TEST_CASE("static_vector erase returns the following iterator", "[detail][static_vector]") + { + auto values = __make_static_vector(1, 2, 3, 4); + + auto const next = values.erase(values.begin() + 1, values.begin() + 3); + CHECK(next == values.begin() + 1); + CHECK(values.size() == 2); + CHECK(values[0] == 1); + CHECK(values[1] == 4); + + auto const noop = values.erase(values.begin(), values.begin()); + CHECK(noop == values.begin()); + CHECK(values.size() == 2); + + auto const tail = values.erase(values.begin() + 1, values.end()); + CHECK(tail == values.end()); + CHECK(values.size() == 1); + + __static_vector empty; + CHECK(empty.erase(empty.begin(), empty.end()) == empty.end()); + } +#endif + } // namespace