30 #ifndef _ENABLE_SPECIAL_MEMBERS_H
31 #define _ENABLE_SPECIAL_MEMBERS_H 1
33 #pragma GCC system_header
35 namespace std _GLIBCXX_VISIBILITY(default)
37 _GLIBCXX_BEGIN_NAMESPACE_VERSION
39 struct _Enable_default_constructor_tag
41 explicit constexpr _Enable_default_constructor_tag() =
default;
49 template<
bool _Switch,
typename _Tag =
void>
73 template<
bool _Switch,
typename _Tag =
void>
81 template<
bool _Copy,
bool _CopyAssignment,
82 bool _Move,
bool _MoveAssignment,
93 template<
bool _Default,
bool _Destructor,
94 bool _Copy,
bool _CopyAssignment,
95 bool _Move,
bool _MoveAssignment,
101 _Move, _MoveAssignment,
107 template<
typename _Tag>
125 template<
typename _Tag>
126 struct _Enable_destructor<false, _Tag>
127 { ~_Enable_destructor() noexcept = delete; };
129 template<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;
141 template<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;
153 template<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;
165 template<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;
177 template<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;
189 template<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;
201 template<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;
213 template<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;
225 template<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;
237 template<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;
249 template<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;
261 template<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;
273 template<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;
285 template<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;
297 template<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.