@@ -25,6 +25,12 @@ static_assert(!std::ranges::enable_view<Empty&&>);
25
25
static_assert (!std::ranges::enable_view<const Empty>);
26
26
static_assert (!std::ranges::enable_view<const Empty&>);
27
27
static_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&&>);
28
34
29
35
// Derives from view_base, but privately
30
36
struct PrivateViewBase : private std ::ranges::view_base { };
@@ -34,6 +40,12 @@ static_assert(!std::ranges::enable_view<PrivateViewBase&&>);
34
40
static_assert (!std::ranges::enable_view<const PrivateViewBase>);
35
41
static_assert (!std::ranges::enable_view<const PrivateViewBase&>);
36
42
static_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&&>);
37
49
38
50
// Derives from view_base, but specializes enable_view to false
39
51
struct EnableViewFalse : std::ranges::view_base { };
@@ -44,6 +56,12 @@ static_assert(!std::ranges::enable_view<EnableViewFalse&&>);
44
56
static_assert (std::ranges::enable_view<const EnableViewFalse>);
45
57
static_assert (!std::ranges::enable_view<const EnableViewFalse&>);
46
58
static_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&&>);
47
65
48
66
// Derives from view_base
49
67
struct PublicViewBase : std::ranges::view_base { };
@@ -53,6 +71,12 @@ static_assert(!std::ranges::enable_view<PublicViewBase&&>);
53
71
static_assert (std::ranges::enable_view<const PublicViewBase>);
54
72
static_assert (!std::ranges::enable_view<const PublicViewBase&>);
55
73
static_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&&>);
56
80
57
81
// Does not derive from view_base, but specializes enable_view to true
58
82
struct EnableViewTrue { };
@@ -63,6 +87,12 @@ static_assert(!std::ranges::enable_view<EnableViewTrue&&>);
63
87
static_assert (!std::ranges::enable_view<const EnableViewTrue>);
64
88
static_assert (!std::ranges::enable_view<const EnableViewTrue&>);
65
89
static_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&&>);
66
96
67
97
// Make sure that enable_view is a bool, not some other contextually-convertible-to-bool type.
68
98
ASSERT_SAME_TYPE (decltype (std::ranges::enable_view<Empty>), const bool);
@@ -75,6 +105,12 @@ static_assert(!std::ranges::enable_view<V1&&>);
75
105
static_assert (std::ranges::enable_view<const V1>);
76
106
static_assert (!std::ranges::enable_view<const V1&>);
77
107
static_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&&>);
78
114
79
115
struct V2 : std::ranges::view_interface<V1>, std::ranges::view_interface<V2> {};
80
116
static_assert (!std::ranges::enable_view<V2>);
@@ -83,6 +119,12 @@ static_assert(!std::ranges::enable_view<V2&&>);
83
119
static_assert (!std::ranges::enable_view<const V2>);
84
120
static_assert (!std::ranges::enable_view<const V2&>);
85
121
static_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&&>);
86
128
87
129
struct V3 : std::ranges::view_interface<V1> {};
88
130
static_assert (std::ranges::enable_view<V3>);
@@ -91,13 +133,35 @@ static_assert(!std::ranges::enable_view<V3&&>);
91
133
static_assert (std::ranges::enable_view<const V3>);
92
134
static_assert (!std::ranges::enable_view<const V3&>);
93
135
static_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&&>);
94
142
95
143
struct PrivateInherit : private std ::ranges::view_interface<PrivateInherit> {};
96
144
static_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>>);
97
155
98
156
// ADL-proof
99
157
struct Incomplete ;
100
158
template <class T > struct Holder { T t; };
101
159
static_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>*>);
102
163
103
164
static_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