30#ifndef _ENABLE_SPECIAL_MEMBERS_H
31#define _ENABLE_SPECIAL_MEMBERS_H 1
33#pragma GCC system_header
35namespace std _GLIBCXX_VISIBILITY(default)
37_GLIBCXX_BEGIN_NAMESPACE_VERSION
39 struct _Enable_default_constructor_tag
41 explicit constexpr _Enable_default_constructor_tag() =
default;
49template<
bool _Switch,
typename _Tag =
void>
73template<
bool _Switch,
typename _Tag =
void>
81template<
bool _Copy,
bool _CopyAssignment,
82 bool _Move,
bool _MoveAssignment,
93template<
bool _Default,
bool _Destructor,
94 bool _Copy,
bool _CopyAssignment,
95 bool _Move,
bool _MoveAssignment,
101 _Move, _MoveAssignment,
107template<
typename _Tag>
125template<
typename _Tag>
126 struct _Enable_destructor<false, _Tag>
127 { ~_Enable_destructor() noexcept = delete; };
129template<typename _Tag>
130 struct _Enable_copy_move<false, true, true, true, _Tag>
132 constexpr _Enable_copy_move() noexcept = default;
133 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
134 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
136 operator=(_Enable_copy_move const&) noexcept = default;
138 operator=(_Enable_copy_move&&) noexcept = default;
141template<typename _Tag>
142 struct _Enable_copy_move<true, false, true, true, _Tag>
144 constexpr _Enable_copy_move() noexcept = default;
145 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
146 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
148 operator=(_Enable_copy_move const&) noexcept = delete;
150 operator=(_Enable_copy_move&&) noexcept = default;
153template<typename _Tag>
154 struct _Enable_copy_move<false, false, true, true, _Tag>
156 constexpr _Enable_copy_move() noexcept = default;
157 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
158 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
160 operator=(_Enable_copy_move const&) noexcept = delete;
162 operator=(_Enable_copy_move&&) noexcept = default;
165template<typename _Tag>
166 struct _Enable_copy_move<true, true, false, true, _Tag>
168 constexpr _Enable_copy_move() noexcept = default;
169 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
170 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
172 operator=(_Enable_copy_move const&) noexcept = default;
174 operator=(_Enable_copy_move&&) noexcept = default;
177template<typename _Tag>
178 struct _Enable_copy_move<false, true, false, true, _Tag>
180 constexpr _Enable_copy_move() noexcept = default;
181 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
182 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
184 operator=(_Enable_copy_move const&) noexcept = default;
186 operator=(_Enable_copy_move&&) noexcept = default;
189template<typename _Tag>
190 struct _Enable_copy_move<true, false, false, true, _Tag>
192 constexpr _Enable_copy_move() noexcept = default;
193 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
194 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
196 operator=(_Enable_copy_move const&) noexcept = delete;
198 operator=(_Enable_copy_move&&) noexcept = default;
201template<typename _Tag>
202 struct _Enable_copy_move<false, false, false, true, _Tag>
204 constexpr _Enable_copy_move() noexcept = default;
205 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
206 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
208 operator=(_Enable_copy_move const&) noexcept = delete;
210 operator=(_Enable_copy_move&&) noexcept = default;
213template<typename _Tag>
214 struct _Enable_copy_move<true, true, true, false, _Tag>
216 constexpr _Enable_copy_move() noexcept = default;
217 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
218 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
220 operator=(_Enable_copy_move const&) noexcept = default;
222 operator=(_Enable_copy_move&&) noexcept = delete;
225template<typename _Tag>
226 struct _Enable_copy_move<false, true, true, false, _Tag>
228 constexpr _Enable_copy_move() noexcept = default;
229 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
230 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
232 operator=(_Enable_copy_move const&) noexcept = default;
234 operator=(_Enable_copy_move&&) noexcept = delete;
237template<typename _Tag>
238 struct _Enable_copy_move<true, false, true, false, _Tag>
240 constexpr _Enable_copy_move() noexcept = default;
241 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
242 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
244 operator=(_Enable_copy_move const&) noexcept = delete;
246 operator=(_Enable_copy_move&&) noexcept = delete;
249template<typename _Tag>
250 struct _Enable_copy_move<false, false, true, false, _Tag>
252 constexpr _Enable_copy_move() noexcept = default;
253 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
254 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = default;
256 operator=(_Enable_copy_move const&) noexcept = delete;
258 operator=(_Enable_copy_move&&) noexcept = delete;
261template<typename _Tag>
262 struct _Enable_copy_move<true, true, false, false, _Tag>
264 constexpr _Enable_copy_move() noexcept = default;
265 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
266 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
268 operator=(_Enable_copy_move const&) noexcept = default;
270 operator=(_Enable_copy_move&&) noexcept = delete;
273template<typename _Tag>
274 struct _Enable_copy_move<false, true, false, false, _Tag>
276 constexpr _Enable_copy_move() noexcept = default;
277 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
278 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
280 operator=(_Enable_copy_move const&) noexcept = default;
282 operator=(_Enable_copy_move&&) noexcept = delete;
285template<typename _Tag>
286 struct _Enable_copy_move<true, false, false, false, _Tag>
288 constexpr _Enable_copy_move() noexcept = default;
289 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = default;
290 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
292 operator=(_Enable_copy_move const&) noexcept = delete;
294 operator=(_Enable_copy_move&&) noexcept = delete;
297template<typename _Tag>
298 struct _Enable_copy_move<false, false, false, false, _Tag>
300 constexpr _Enable_copy_move() noexcept = default;
301 constexpr _Enable_copy_move(_Enable_copy_move const&) noexcept = delete;
302 constexpr _Enable_copy_move(_Enable_copy_move&&) noexcept = delete;
304 operator=(_Enable_copy_move const&) noexcept = delete;
306 operator=(_Enable_copy_move&&) noexcept = delete;
309_GLIBCXX_END_NAMESPACE_VERSION
ISO C++ entities toplevel namespace is std.
A mixin helper to conditionally enable or disable the default constructor.
A mixin helper to conditionally enable or disable the default destructor.
A mixin helper to conditionally enable or disable the copy/move special members.
A mixin helper to conditionally enable or disable the special members.