[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