[libcxx-commits] [PATCH] D117918: [libc++][test] Add const and reference tests for enable_view

Joe Loser via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jan 21 12:08:09 PST 2022


jloser created this revision.
jloser added reviewers: Quuxplusone, ldionne, Mordante, var-const, philnik.
jloser requested review of this revision.
Herald added a project: libc++.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++.

As discussed in https://reviews.llvm.org/D117714, there is missing test coverage
for the behavior of `enable_view` when given a const or reference qualified
type. Add such tests showing the current behavior.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D117918

Files:
  libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp


Index: libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
===================================================================
--- libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
+++ libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
@@ -22,26 +22,49 @@
 // Doesn't derive from view_base
 struct Empty { };
 static_assert(!std::ranges::enable_view<Empty>);
+static_assert(!std::ranges::enable_view<Empty&>);
+static_assert(!std::ranges::enable_view<Empty&&>);
+static_assert(!std::ranges::enable_view<const Empty>);
+static_assert(!std::ranges::enable_view<const Empty&>);
+static_assert(!std::ranges::enable_view<const Empty&&>);
 
 // Derives from view_base, but privately
 struct PrivateViewBase : private std::ranges::view_base { };
 static_assert(!std::ranges::enable_view<PrivateViewBase>);
+static_assert(!std::ranges::enable_view<PrivateViewBase&>);
+static_assert(!std::ranges::enable_view<PrivateViewBase&&>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase&>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase&&>);
 
 // Derives from view_base, but specializes enable_view to false
 struct EnableViewFalse : std::ranges::view_base { };
 namespace std::ranges { template <> constexpr bool enable_view<EnableViewFalse> = false; }
 static_assert(!std::ranges::enable_view<EnableViewFalse>);
-
+static_assert(!std::ranges::enable_view<EnableViewFalse&>);
+static_assert(!std::ranges::enable_view<EnableViewFalse&&>);
+static_assert(std::ranges::enable_view<const EnableViewFalse>);
+static_assert(!std::ranges::enable_view<const EnableViewFalse&>);
+static_assert(!std::ranges::enable_view<const EnableViewFalse&&>);
 
 // Derives from view_base
 struct PublicViewBase : std::ranges::view_base { };
 static_assert(std::ranges::enable_view<PublicViewBase>);
+static_assert(!std::ranges::enable_view<PublicViewBase&>);
+static_assert(!std::ranges::enable_view<PublicViewBase&&>);
+static_assert(std::ranges::enable_view<const PublicViewBase>);
+static_assert(!std::ranges::enable_view<const PublicViewBase&>);
+static_assert(!std::ranges::enable_view<const PublicViewBase&&>);
 
 // Does not derive from view_base, but specializes enable_view to true
 struct EnableViewTrue { };
 namespace std::ranges { template <> constexpr bool enable_view<EnableViewTrue> = true; }
 static_assert(std::ranges::enable_view<EnableViewTrue>);
-
+static_assert(!std::ranges::enable_view<EnableViewTrue&>);
+static_assert(!std::ranges::enable_view<EnableViewTrue&&>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue&>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue&&>);
 
 // Make sure that enable_view is a bool, not some other contextually-convertible-to-bool type.
 ASSERT_SAME_TYPE(decltype(std::ranges::enable_view<Empty>), const bool);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117918.402063.patch
Type: text/x-patch
Size: 2988 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220121/edb7c052/attachment-0001.bin>


More information about the libcxx-commits mailing list