summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-03-26 13:48:57 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-03-26 13:48:57 +0000
commitd9db9f90fbf5218a6edea70e49701bb110ee9180 (patch)
tree7c1e33ed7c98ef1f5bf99396a8af6e19c26bb527
parent2e7d6cd0ec898ac5ff205a2aed096e20ab315cad (diff)
downloadbcm5719-llvm-d9db9f90fbf5218a6edea70e49701bb110ee9180.tar.gz
bcm5719-llvm-d9db9f90fbf5218a6edea70e49701bb110ee9180.zip
Need one more swap overload for swapping two lvalue vector<bool>::reference's.
llvm-svn: 178016
-rw-r--r--libcxx/include/__bit_reference10
-rw-r--r--libcxx/test/containers/sequences/vector.bool/swap.pass.cpp10
2 files changed, 20 insertions, 0 deletions
diff --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index 8180295bde3..1621deb8883 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -81,6 +81,16 @@ class __bit_reference<_Cp, false>
{
};
+template <class _Cp>
+_LIBCPP_INLINE_VISIBILITY inline
+void
+swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT
+{
+ bool __t = __x;
+ __x = __y;
+ __y = __t;
+}
+
template <class _Cp, class _Dp>
_LIBCPP_INLINE_VISIBILITY inline
void
diff --git a/libcxx/test/containers/sequences/vector.bool/swap.pass.cpp b/libcxx/test/containers/sequences/vector.bool/swap.pass.cpp
index 642641ed10d..5d0f0af129e 100644
--- a/libcxx/test/containers/sequences/vector.bool/swap.pass.cpp
+++ b/libcxx/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<bool> v(2);
+ std::vector<bool>::reference r1 = v[0];
+ std::vector<bool>::reference r2 = v[1];
+ r1 = true;
+ using std::swap;
+ swap(r1, r2);
+ assert(v[0] == false);
+ assert(v[1] == true);
+ }
}
OpenPOWER on IntegriCloud