64 constexpr bool_set(
bool __t) : _M_b(_Bool_set_val(__t)) { }
72 {
return __b._M_b == _M_b; }
76 {
return _M_b == _S_empty; }
80 {
return _M_b == _S_indet; }
84 {
return _M_b == _S_false || _M_b == _S_true_; }
113 {
return __b._M_not(); }
117 {
return __s._M_xor(__t); }
121 {
return __s._M_or(__t); }
125 {
return __s._M_and(__t); }
129 {
return __s._M_eq(__t); }
134 template<
typename CharT,
typename Traits>
135 friend std::basic_ostream<CharT, Traits>&
136 operator<<(std::basic_ostream<CharT, Traits>& __out,
bool_set __b)
142 template<
typename CharT,
typename Traits>
143 friend std::basic_istream<CharT, Traits>&
144 operator>>(std::basic_istream<CharT, Traits>& __in,
bool_set& __b)
148 if (__c >= _S_false && __c < _S_empty)
149 __b._M_b =
static_cast<_Bool_set_val
>(__c);
155 enum _Bool_set_val:
unsigned char
167 bool_set(_Bool_set_val __c) : _M_b(__c) { }
171 {
return _S_not[this->_M_b]; }
175 {
return _S_xor[this->_M_b][__b._M_b]; }
179 {
return _S_or[this->_M_b][__b._M_b]; }
183 {
return _S_and[this->_M_b][__b._M_b]; }
187 {
return _S_eq[this->_M_b][__b._M_b]; }
190 static _Bool_set_val _S_not[4];
193 static _Bool_set_val _S_xor[4][4];
196 static _Bool_set_val _S_or[4][4];
199 static _Bool_set_val _S_and[4][4];
202 static _Bool_set_val _S_eq[4][4];