Hello.
I am wondering how std::swap should be overloaded for the proposal I describe
here about bit utilities.
In the following, a
bit_value models an independent, non-referenced bit, whereas
bit_reference<UIntType> mimics a reference to a bit within an integer.
I am wondering, which overloads of std::swap should be provided for these classes, as they all refer to the same concept of a bit.
- std::swap(bit_value& lhs, bit_value& rhs); // Would have the name behaviour as the generic templated std::swap
- template <class T> std::swap(bit_reference<T> lhs, bit_reference<T> rhs);
- template <class T> std::swap(bit_reference<T>& lhs, bit_reference<T>& rhs);
- template <class T> std::swap(bit_reference<T>&& lhs, bit_reference<T>&& rhs);
- template <class T> std::swap(bit_reference<T> lhs, bit_value& rhs);
- template <class T> std::swap(bit_reference<T>& lhs, bit_value& rhs);
- template <class T> std::swap(bit_reference<T>&& lhs, bit_value& rhs);
- template <class T> std::swap(bit_value& lhs, bit_reference<T> rhs);
- template <class T> std::swap(bit_value& lhs, bit_reference<T>& rhs);
- template <class T> std::swap(bit_value& lhs, bit_reference<T>&& rhs);
- template <class T, class U> std::swap(bit_reference<T> lhs, bit_reference<U> rhs);
- template <class T, class U> std::swap(bit_reference<T> lhs, bit_reference<U>& rhs);
- template <class T, class U> std::swap(bit_reference<T> lhs, bit_reference<U>&& rhs);
- template <class T, class U> std::swap(bit_reference<T>& lhs, bit_reference<U>& rhs);
- template <class T, class U> std::swap(bit_reference<T>& lhs, bit_reference<U>&& rhs);
- template <class T, class U> std::swap(bit_reference<T>&& lhs, bit_reference<U>&& rhs);
Does the standard provide some guidance over what should be provided, and what should not, and based on what criterion?
Thanks,
Vincent