[libcxx-commits] [clang] [clang-tools-extra] [libcxx] [llvm] [libc++] LWG4012: common_view::begin/end are missing the simple-view check (PR #153674)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Feb 7 21:54:28 PST 2026
================
@@ -90,4 +90,37 @@ struct NonCommonView : std::ranges::view_base {
static_assert( std::ranges::view<NonCommonView>);
static_assert(!std::ranges::common_range<NonCommonView>);
+template <class T>
+concept HasConstBegin = requires(const T& ct) { ct.begin(); };
+
+template <class T>
+concept HasBegin = requires(T& t) { t.begin(); };
+
+template <class T>
+concept HasConstAndNonConstBegin = HasConstBegin<T> && requires(T& t, const T& ct) {
+ requires !std::same_as<decltype(t.begin()), decltype(ct.begin())>;
+};
+
+template <class T>
+concept HasOnlyNonConstBegin = HasBegin<T> && !HasConstBegin<T>;
+
+template <class T>
+concept HasOnlyConstBegin = HasConstBegin<T> && !HasConstAndNonConstBegin<T>;
+
+struct NonSimpleNonCommonView : std::ranges::view_base {
+ int* begin_;
+ int* end_;
+ constexpr explicit NonSimpleNonCommonView(int* b, int* e) : begin_(b), end_(e) {}
+ constexpr auto begin() const { return static_cast<const int*>(begin_); }
+ constexpr auto end() const { return sentinel_wrapper<const int*>(end_); }
+ constexpr int* begin() { return begin_; }
+ constexpr auto end() { return sentinel_wrapper<int*>(end_); }
+};
+
+static_assert(!HasOnlyNonConstBegin<std::ranges::common_view<NonSimpleNonCommonView>>);
+static_assert(!HasOnlyConstBegin<std::ranges::common_view<NonSimpleNonCommonView>>);
+static_assert(HasConstAndNonConstBegin<std::ranges::common_view<NonSimpleNonCommonView>>);
+static_assert(HasConstBegin<std::ranges::common_view<const NonSimpleNonCommonView>>);
+static_assert(HasOnlyConstBegin<std::ranges::common_view<const NonSimpleNonCommonView>>);
----------------
frederick-vs-ja wrote:
Sorry for suggesting wrong changes.
```suggestion
static_assert(HasConstBegin<const std::ranges::common_view<NonSimpleNonCommonView>>);
static_assert(HasOnlyConstBegin<const std::ranges::common_view<NonSimpleNonCommonView>>);
```
https://github.com/llvm/llvm-project/pull/153674
More information about the libcxx-commits
mailing list