@@ -25,6 +25,12 @@ static_assert(!std::ranges::enable_view<Empty&&>);
2525static_assert (!std::ranges::enable_view<const Empty>);
2626static_assert (!std::ranges::enable_view<const Empty&>);
2727static_assert (!std::ranges::enable_view<const Empty&&>);
28+ static_assert (!std::ranges::enable_view<volatile Empty>);
29+ static_assert (!std::ranges::enable_view<volatile Empty&>);
30+ static_assert (!std::ranges::enable_view<volatile Empty&&>);
31+ static_assert (!std::ranges::enable_view<const volatile Empty>);
32+ static_assert (!std::ranges::enable_view<const volatile Empty&>);
33+ static_assert (!std::ranges::enable_view<const volatile Empty&&>);
2834
2935// Derives from view_base, but privately
3036struct PrivateViewBase : private std ::ranges::view_base { };
@@ -34,6 +40,12 @@ static_assert(!std::ranges::enable_view<PrivateViewBase&&>);
3440static_assert (!std::ranges::enable_view<const PrivateViewBase>);
3541static_assert (!std::ranges::enable_view<const PrivateViewBase&>);
3642static_assert (!std::ranges::enable_view<const PrivateViewBase&&>);
43+ static_assert (!std::ranges::enable_view<volatile PrivateViewBase>);
44+ static_assert (!std::ranges::enable_view<volatile PrivateViewBase&>);
45+ static_assert (!std::ranges::enable_view<volatile PrivateViewBase&&>);
46+ static_assert (!std::ranges::enable_view<const volatile PrivateViewBase>);
47+ static_assert (!std::ranges::enable_view<const volatile PrivateViewBase&>);
48+ static_assert (!std::ranges::enable_view<const volatile PrivateViewBase&&>);
3749
3850// Derives from view_base, but specializes enable_view to false
3951struct EnableViewFalse : std::ranges::view_base { };
@@ -44,6 +56,12 @@ static_assert(!std::ranges::enable_view<EnableViewFalse&&>);
4456static_assert (std::ranges::enable_view<const EnableViewFalse>);
4557static_assert (!std::ranges::enable_view<const EnableViewFalse&>);
4658static_assert (!std::ranges::enable_view<const EnableViewFalse&&>);
59+ static_assert (std::ranges::enable_view<volatile EnableViewFalse>);
60+ static_assert (!std::ranges::enable_view<volatile EnableViewFalse&>);
61+ static_assert (!std::ranges::enable_view<volatile EnableViewFalse&&>);
62+ static_assert (std::ranges::enable_view<const volatile EnableViewFalse>);
63+ static_assert (!std::ranges::enable_view<const volatile EnableViewFalse&>);
64+ static_assert (!std::ranges::enable_view<const volatile EnableViewFalse&&>);
4765
4866// Derives from view_base
4967struct PublicViewBase : std::ranges::view_base { };
@@ -53,6 +71,12 @@ static_assert(!std::ranges::enable_view<PublicViewBase&&>);
5371static_assert (std::ranges::enable_view<const PublicViewBase>);
5472static_assert (!std::ranges::enable_view<const PublicViewBase&>);
5573static_assert (!std::ranges::enable_view<const PublicViewBase&&>);
74+ static_assert (std::ranges::enable_view<volatile PublicViewBase>);
75+ static_assert (!std::ranges::enable_view<volatile PublicViewBase&>);
76+ static_assert (!std::ranges::enable_view<volatile PublicViewBase&&>);
77+ static_assert (std::ranges::enable_view<const volatile PublicViewBase>);
78+ static_assert (!std::ranges::enable_view<const volatile PublicViewBase&>);
79+ static_assert (!std::ranges::enable_view<const volatile PublicViewBase&&>);
5680
5781// Does not derive from view_base, but specializes enable_view to true
5882struct EnableViewTrue { };
@@ -63,6 +87,12 @@ static_assert(!std::ranges::enable_view<EnableViewTrue&&>);
6387static_assert (!std::ranges::enable_view<const EnableViewTrue>);
6488static_assert (!std::ranges::enable_view<const EnableViewTrue&>);
6589static_assert (!std::ranges::enable_view<const EnableViewTrue&&>);
90+ static_assert (!std::ranges::enable_view<volatile EnableViewTrue>);
91+ static_assert (!std::ranges::enable_view<volatile EnableViewTrue&>);
92+ static_assert (!std::ranges::enable_view<volatile EnableViewTrue&&>);
93+ static_assert (!std::ranges::enable_view<const volatile EnableViewTrue>);
94+ static_assert (!std::ranges::enable_view<const volatile EnableViewTrue&>);
95+ static_assert (!std::ranges::enable_view<const volatile EnableViewTrue&&>);
6696
6797// Make sure that enable_view is a bool, not some other contextually-convertible-to-bool type.
6898ASSERT_SAME_TYPE (decltype (std::ranges::enable_view<Empty>), const bool);
@@ -75,6 +105,12 @@ static_assert(!std::ranges::enable_view<V1&&>);
75105static_assert (std::ranges::enable_view<const V1>);
76106static_assert (!std::ranges::enable_view<const V1&>);
77107static_assert (!std::ranges::enable_view<const V1&&>);
108+ static_assert (std::ranges::enable_view<volatile V1>);
109+ static_assert (!std::ranges::enable_view<volatile V1&>);
110+ static_assert (!std::ranges::enable_view<volatile V1&&>);
111+ static_assert (std::ranges::enable_view<const volatile V1>);
112+ static_assert (!std::ranges::enable_view<const volatile V1&>);
113+ static_assert (!std::ranges::enable_view<const volatile V1&&>);
78114
79115struct V2 : std::ranges::view_interface<V1>, std::ranges::view_interface<V2> {};
80116static_assert (!std::ranges::enable_view<V2>);
@@ -83,6 +119,12 @@ static_assert(!std::ranges::enable_view<V2&&>);
83119static_assert (!std::ranges::enable_view<const V2>);
84120static_assert (!std::ranges::enable_view<const V2&>);
85121static_assert (!std::ranges::enable_view<const V2&&>);
122+ static_assert (!std::ranges::enable_view<volatile V2>);
123+ static_assert (!std::ranges::enable_view<volatile V2&>);
124+ static_assert (!std::ranges::enable_view<volatile V2&&>);
125+ static_assert (!std::ranges::enable_view<const volatile V2>);
126+ static_assert (!std::ranges::enable_view<const volatile V2&>);
127+ static_assert (!std::ranges::enable_view<const volatile V2&&>);
86128
87129struct V3 : std::ranges::view_interface<V1> {};
88130static_assert (std::ranges::enable_view<V3>);
@@ -91,13 +133,35 @@ static_assert(!std::ranges::enable_view<V3&&>);
91133static_assert (std::ranges::enable_view<const V3>);
92134static_assert (!std::ranges::enable_view<const V3&>);
93135static_assert (!std::ranges::enable_view<const V3&&>);
136+ static_assert (std::ranges::enable_view<volatile V3>);
137+ static_assert (!std::ranges::enable_view<volatile V3&>);
138+ static_assert (!std::ranges::enable_view<volatile V3&&>);
139+ static_assert (std::ranges::enable_view<const volatile V3>);
140+ static_assert (!std::ranges::enable_view<const volatile V3&>);
141+ static_assert (!std::ranges::enable_view<const volatile V3&&>);
94142
95143struct PrivateInherit : private std ::ranges::view_interface<PrivateInherit> {};
96144static_assert (!std::ranges::enable_view<PrivateInherit>);
145+ static_assert (!std::ranges::enable_view<const PrivateInherit>);
146+ static_assert (!std::ranges::enable_view<volatile PrivateInherit>);
147+ static_assert (!std::ranges::enable_view<const volatile PrivateInherit>);
148+
149+ // https://github.com/llvm/llvm-project/issues/132577
150+ // enable_view<view_interface<T>> should be false.
151+ static_assert (!std::ranges::enable_view<std::ranges::view_interface<V1>>);
152+ static_assert (!std::ranges::enable_view<const std::ranges::view_interface<V1>>);
153+ static_assert (!std::ranges::enable_view<volatile std::ranges::view_interface<V1>>);
154+ static_assert (!std::ranges::enable_view<const volatile std::ranges::view_interface<V1>>);
97155
98156// ADL-proof
99157struct Incomplete ;
100158template <class T > struct Holder { T t; };
101159static_assert (!std::ranges::enable_view<Holder<Incomplete>*>);
160+ static_assert (!std::ranges::enable_view<const Holder<Incomplete>*>);
161+ static_assert (!std::ranges::enable_view<volatile Holder<Incomplete>*>);
162+ static_assert (!std::ranges::enable_view<const volatile Holder<Incomplete>*>);
102163
103164static_assert (!std::ranges::enable_view<void >);
165+ static_assert (!std::ranges::enable_view<const void >);
166+ static_assert (!std::ranges::enable_view<volatile void >);
167+ static_assert (!std::ranges::enable_view<const volatile void >);
0 commit comments