[libcxx-commits] [libcxx] [libc++][ranges] Backport P2711R1: Making multi-param constructors of views ``explicit`` (PR #190513)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Apr 5 02:33:12 PDT 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions ,cpp,h -- libcxx/include/__config libcxx/include/__ranges/drop_view.h libcxx/include/__ranges/drop_while_view.h libcxx/include/__ranges/filter_view.h libcxx/include/__ranges/iota_view.h libcxx/include/__ranges/lazy_split_view.h libcxx/include/__ranges/split_view.h libcxx/include/__ranges/take_view.h libcxx/include/__ranges/take_while_view.h libcxx/include/__ranges/transform_view.h libcxx/test/std/ranges/range.adaptors/range.drop.while/ctor.view.pass.cpp libcxx/test/std/ranges/range.adaptors/range.drop/ctor.view.pass.cpp libcxx/test/std/ranges/range.adaptors/range.filter/ctor.view_pred.pass.cpp libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.view.pass.cpp libcxx/test/std/ranges/range.adaptors/range.split/ctor.range.pass.cpp libcxx/test/std/ranges/range.adaptors/range.split/ctor.view.pass.cpp libcxx/test/std/ranges/range.adaptors/range.take.while/ctor.view.pass.cpp libcxx/test/std/ranges/range.adaptors/range.take/ctor.view_count.pass.cpp libcxx/test/std/ranges/range.adaptors/range.transform/ctor.view_function.pass.cpp libcxx/test/std/ranges/range.factories/range.iota.view/ctor.first.last.pass.cpp libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.bound.pass.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libcxx/include/__ranges/drop_view.h b/libcxx/include/__ranges/drop_view.h
index ee6842921..e3754e64d 100644
--- a/libcxx/include/__ranges/drop_view.h
+++ b/libcxx/include/__ranges/drop_view.h
@@ -74,8 +74,7 @@ public:
requires default_initializable<_View>
= default;
- _LIBCPP_HIDE_FROM_ABI constexpr explicit
- drop_view(_View __base, range_difference_t<_View> __count)
+ _LIBCPP_HIDE_FROM_ABI constexpr explicit drop_view(_View __base, range_difference_t<_View> __count)
: __count_(__count), __base_(std::move(__base)) {
_LIBCPP_ASSERT_UNCATEGORIZED(__count_ >= 0, "count must be greater than or equal to zero.");
}
diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index 86c2fc498..bbf7e9074 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -316,8 +316,8 @@ public:
_LIBCPP_HIDE_FROM_ABI constexpr explicit iota_view(_Start __value) : __value_(std::move(__value)) {}
- _LIBCPP_HIDE_FROM_ABI constexpr explicit
- iota_view(type_identity_t<_Start> __value, type_identity_t<_BoundSentinel> __bound_sentinel)
+ _LIBCPP_HIDE_FROM_ABI constexpr explicit iota_view(type_identity_t<_Start> __value,
+ type_identity_t<_BoundSentinel> __bound_sentinel)
: __value_(std::move(__value)), __bound_sentinel_(std::move(__bound_sentinel)) {
// Validate the precondition if possible.
if constexpr (totally_ordered_with<_Start, _BoundSentinel>) {
diff --git a/libcxx/include/__ranges/split_view.h b/libcxx/include/__ranges/split_view.h
index ed323b001..17a2ceeca 100644
--- a/libcxx/include/__ranges/split_view.h
+++ b/libcxx/include/__ranges/split_view.h
@@ -84,8 +84,7 @@ public:
template <forward_range _Range>
requires constructible_from<_View, views::all_t<_Range>> &&
constructible_from<_Pattern, single_view<range_value_t<_Range>>>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit
- split_view(_Range&& __range, range_value_t<_Range> __elem)
+ _LIBCPP_HIDE_FROM_ABI constexpr explicit split_view(_Range&& __range, range_value_t<_Range> __elem)
: __base_(views::all(std::forward<_Range>(__range))), __pattern_(views::single(std::move(__elem))) {}
_LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
diff --git a/libcxx/include/__ranges/take_view.h b/libcxx/include/__ranges/take_view.h
index 927f56d7e..999f68653 100644
--- a/libcxx/include/__ranges/take_view.h
+++ b/libcxx/include/__ranges/take_view.h
@@ -69,8 +69,7 @@ public:
requires default_initializable<_View>
= default;
- _LIBCPP_HIDE_FROM_ABI constexpr explicit
- take_view(_View __base, range_difference_t<_View> __count)
+ _LIBCPP_HIDE_FROM_ABI constexpr explicit take_view(_View __base, range_difference_t<_View> __count)
: __base_(std::move(__base)), __count_(__count) {
_LIBCPP_ASSERT_UNCATEGORIZED(__count >= 0, "count has to be greater than or equal to zero");
}
diff --git a/libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp
index 3097e6db0..2eb272ee7 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.lazy.split/ctor.range.pass.cpp
@@ -88,13 +88,10 @@ static_assert(std::is_copy_constructible_v<StrView>);
// SFINAE tests.
-
static_assert(
!test_convertible<std::ranges::lazy_split_view<StrView, StrView>, StrView, std::ranges::range_value_t<StrView>>(),
"This constructor must be explicit");
-
-
constexpr bool test() {
{
using V = std::ranges::lazy_split_view<StrView, StrView>;
``````````
</details>
https://github.com/llvm/llvm-project/pull/190513
More information about the libcxx-commits
mailing list