47 :
public _GLIBCXX_STD_C::bitset<_Nb>
48#if __cplusplus < 201103L
52 typedef _GLIBCXX_STD_C::bitset<_Nb> _Base;
58#if __cplusplus >= 201103L
59 typedef typename _Base::reference reference;
63 :
private _Base::reference
66 typedef typename _Base::reference _Base_ref;
71 reference(
const _Base_ref& __base, bitset* __seq) _GLIBCXX_NOEXCEPT
73 , _Safe_iterator_base(__seq,
false)
77 reference(
const reference& __x) _GLIBCXX_NOEXCEPT
79 , _Safe_iterator_base(__x,
false)
83 operator=(
bool __x) _GLIBCXX_NOEXCEPT
85 _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
86 _M_message(__gnu_debug::__msg_bad_bitset_write)
88 *
static_cast<_Base_ref*
>(
this) = __x;
93 operator=(
const reference& __x) _GLIBCXX_NOEXCEPT
95 _GLIBCXX_DEBUG_VERIFY(!__x._M_singular(),
96 _M_message(__gnu_debug::__msg_bad_bitset_read)
98 _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
99 _M_message(__gnu_debug::__msg_bad_bitset_write)
100 ._M_iterator(*
this));
101 *
static_cast<_Base_ref*
>(
this) = __x;
106 operator~()
const _GLIBCXX_NOEXCEPT
108 _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
109 _M_message(__gnu_debug::__msg_bad_bitset_read)
110 ._M_iterator(*
this));
111 return ~(*
static_cast<const _Base_ref*
>(
this));
114 operator bool()
const _GLIBCXX_NOEXCEPT
116 _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
117 _M_message(__gnu_debug::__msg_bad_bitset_read)
118 ._M_iterator(*
this));
119 return *
static_cast<const _Base_ref*
>(
this);
123 flip() _GLIBCXX_NOEXCEPT
125 _GLIBCXX_DEBUG_VERIFY(!this->_M_singular(),
126 _M_message(__gnu_debug::__msg_bad_bitset_flip)
127 ._M_iterator(*
this));
135 _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
138#if __cplusplus >= 201103L
139 constexpr bitset(
unsigned long long __val)
noexcept
141 bitset(
unsigned long __val)
145 template<
typename _CharT,
typename _Traits,
typename _Alloc>
149 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
151 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
153 : _Base(__str, __pos, __n) { }
157 template<
class _CharT,
class _Traits,
class _Alloc>
160 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
162 typename std::basic_string<_CharT, _Traits, _Alloc>::size_type
164 _CharT __zero, _CharT __one = _CharT(
'1'))
165 : _Base(__str, __pos, __n, __zero, __one) { }
167#ifdef __cpp_lib_bitset
168 template<
class _CharT,
class _Traits>
171 std::basic_string_view<_CharT, _Traits>::size_type __position = 0,
172 std::basic_string_view<_CharT, _Traits>::size_type __n =
173 std::basic_string_view<_CharT, _Traits>::npos,
174 _CharT __zero = _CharT(
'0'), _CharT __one = _CharT(
'1'))
175 : _Base(__s, __position, __n, __zero, __one) { }
179 bitset(
const _Base& __x) : _Base(__x) { }
181#if __cplusplus >= 201103L
184 template<
typename _CharT,
185 typename = _Require<is_trivially_copyable<_CharT>,
188 __not_<is_array<_CharT>>>>
191 bitset(
const _CharT* __str,
192 typename std::basic_string<_CharT>::size_type __n
194 _CharT __zero = _CharT(
'0'), _CharT __one = _CharT(
'1'))
195 : _Base(__str, __n, __zero, __one) { }
201 operator&=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
209 operator|=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
217 operator^=(
const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
225 operator<<=(
size_t __pos) _GLIBCXX_NOEXCEPT
233 operator>>=(
size_t __pos) _GLIBCXX_NOEXCEPT
241 set() _GLIBCXX_NOEXCEPT
251 set(
size_t __pos,
bool __val =
true)
253 _Base::set(__pos, __val);
259 reset() _GLIBCXX_NOEXCEPT
275 operator~()
const _GLIBCXX_NOEXCEPT
276 {
return bitset(~_M_base()); }
280 flip() _GLIBCXX_NOEXCEPT
299 operator[](
size_t __pos)
301 __glibcxx_check_subscript(__pos);
302#if __cplusplus >= 201103L
303 return _M_base()[__pos];
305 return reference(_M_base()[__pos],
this);
311 _GLIBCXX_CONSTEXPR
bool
312 operator[](
size_t __pos)
const
314#if __cplusplus < 201103L
316 __glibcxx_check_subscript(__pos);
318 return _Base::operator[](__pos);
321 using _Base::to_ulong;
322#if __cplusplus >= 201103L
323 using _Base::to_ullong;
326 template <
typename _CharT,
typename _Traits,
typename _Alloc>
330 {
return _M_base().template to_string<_CharT, _Traits, _Alloc>(); }
334 template<
class _CharT,
class _Traits,
class _Alloc>
337 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
339 return _M_base().template
340 to_string<_CharT, _Traits, _Alloc>(__zero, __one);
345 template<
typename _CharT,
typename _Traits>
349 {
return to_string<_CharT, _Traits, std::allocator<_CharT> >(); }
353 template<
class _CharT,
class _Traits>
356 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
357 {
return to_string<_CharT, _Traits,
360 template<
typename _CharT>
366 return to_string<_CharT, std::char_traits<_CharT>,
370 template<
class _CharT>
374 to_string(_CharT __zero, _CharT __one = _CharT(
'1'))
const
376 return to_string<_CharT, std::char_traits<_CharT>,
389 to_string(
char __zero,
char __one =
'1')
const
391 return to_string<char, std::char_traits<char>,
400 operator==(
const bitset<_Nb>& __rhs)
const _GLIBCXX_NOEXCEPT
401 {
return _M_base() == __rhs._M_base(); }
403#if __cpp_impl_three_way_comparison < 201907L
405 operator!=(
const bitset<_Nb>& __rhs)
const _GLIBCXX_NOEXCEPT
406 {
return _M_base() != __rhs._M_base(); }
416 operator<<(
size_t __pos)
const _GLIBCXX_NOEXCEPT
417 {
return bitset<_Nb>(_M_base() << __pos); }
421 operator>>(
size_t __pos)
const _GLIBCXX_NOEXCEPT
422 {
return bitset<_Nb>(_M_base() >> __pos); }
426 _M_base() _GLIBCXX_NOEXCEPT
431 _M_base()
const _GLIBCXX_NOEXCEPT