std::bitset::reference(3)

NAME
std::bitset::reference - std::bitset::reference

Synopsis
   class reference;
   The std::bitset class includes std::bitset::reference as a publicly-accessible
   nested class. This class is used as a proxy object to allow users to interact with
   individual bits of a bitset, since standard C++ types (like references and pointers)
   are not built with enough precision to specify individual bits.
   The primary use of std::bitset::reference is to provide an l-value that can be
   returned from operator[].
   Any reads or writes to a bitset that happen via a std::bitset::reference potentially
   read or write to the entire underlying bitset.

Member functions
   constructor constructs the reference. Accessible only to std::bitset itself
                 (private member function)
   destructor destroys the reference
                 (public member function)
   operator= assigns a bool to the referenced bit
                 (public member function)
   operator bool returns the referenced bit
                 (public member function)
   operator~ returns inverted referenced bit
                 (public member function)
   flip flips the referenced bit
                 (public member function) std::bitset<N>::reference::~reference
   ~reference(); (until C++23)
   constexpr ~reference(); (since C++23)
   Destroys the reference. std::bitset<N>::reference::operator=
   reference& operator=( bool x ); (until C++11)
   reference& operator=( bool x ) noexcept; (since C++11)
                        (until C++23)
   constexpr reference& operator=( bool x ) (since C++23)
   noexcept; (1)
   reference& operator=( const reference& x ); (until C++11)
   reference& operator=( const reference& x ) (since C++11)
   noexcept; (2) (until C++23)
   constexpr reference& operator=( const reference& (since C++23)
   x ) noexcept;
   Assigns a value to the referenced bit.

Parameters
   x - value to assign

Return value
   *this std::bitset<N>::reference::operator bool
   operator bool() const; (until C++11)
   operator bool() const noexcept; (since C++11)
                        (until C++23)
   constexpr operator bool() const noexcept; (since C++23)
   Returns the value of the referenced bit.

Parameters
   (none)

Return value
   The referenced bit. std::bitset<N>::reference::operator~
   bool operator~() const; (until C++11)
   bool operator~() const noexcept; (since C++11)
                        (until C++23)
   constexpr bool operator~() const noexcept; (since C++23)
   Returns the inverse of the referenced bit.

Parameters
   (none)

Return value
   The inverse of the referenced bit. std::bitset<N>::reference::flip
   reference& flip(); (until C++11)
   reference& flip() noexcept; (since C++11)
                        (until C++23)
   constexpr reference& flip() noexcept; (since C++23)
   Inverts the referenced bit.

Parameters
   (none)

Return value
   *this

Example
// Run this code
 #include <bitset>
 #include <iostream>
 int main()
 {
     std::bitset<4> bs( 0b1110 );
     std::bitset<4>::reference ref = bs[2]; // auto ref = bs[2];
     auto info = [&](int n) {
         std::cout << n << ") bs: " << bs << "; ref bit: " << ref << '\n';
     };
     info(1);
     ref = false;
     info(2);
     ref = true;
     info(3);
     ref.flip();
     info(4);
     ref = bs[1]; // operator=( const reference& x )
     info(5);
     std::cout << "6) ~ref bit: " << ~ref << '\n';
 }

Output:
 1) bs: 1110; ref bit: 1
 2) bs: 1010; ref bit: 0
 3) bs: 1110; ref bit: 1
 4) bs: 1010; ref bit: 0
 5) bs: 1110; ref bit: 1
 6) ~ref bit: 0

See also
   operator[] accesses specific bit
              (public member function)