diff --git a/include/__bit_reference b/include/__bit_reference index 8180295bd..1621deb88 100644 --- a/include/__bit_reference +++ b/include/__bit_reference @@ -81,6 +81,16 @@ class __bit_reference<_Cp, false> { }; +template +_LIBCPP_INLINE_VISIBILITY inline +void +swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT +{ + bool __t = __x; + __x = __y; + __y = __t; +} + template _LIBCPP_INLINE_VISIBILITY inline void diff --git a/test/containers/sequences/vector.bool/swap.pass.cpp b/test/containers/sequences/vector.bool/swap.pass.cpp index 642641ed1..5d0f0af12 100644 --- a/test/containers/sequences/vector.bool/swap.pass.cpp +++ b/test/containers/sequences/vector.bool/swap.pass.cpp @@ -51,4 +51,14 @@ int main() assert(v1.get_allocator() == A(2)); assert(v2.get_allocator() == A(1)); } + { + std::vector v(2); + std::vector::reference r1 = v[0]; + std::vector::reference r2 = v[1]; + r1 = true; + using std::swap; + swap(r1, r2); + assert(v[0] == false); + assert(v[1] == true); + } }