[libcxx] r265672 - Fix bug #27260 - add missing swap(reference, reference) to vector<bool>.

Marshall Clow via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 7 07:20:31 PDT 2016


Author: marshall
Date: Thu Apr  7 09:20:31 2016
New Revision: 265672

URL: http://llvm.org/viewvc/llvm-project?rev=265672&view=rev
Log:
Fix bug #27260 - add missing swap(reference, reference) to vector<bool>.

Added:
    libcxx/trunk/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp
Modified:
    libcxx/trunk/include/vector

Modified: libcxx/trunk/include/vector
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/vector?rev=265672&r1=265671&r2=265672&view=diff
==============================================================================
--- libcxx/trunk/include/vector (original)
+++ libcxx/trunk/include/vector Thu Apr  7 09:20:31 2016
@@ -2363,6 +2363,7 @@ public:
         _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || 
                     __is_nothrow_swappable<allocator_type>::value);
 #endif
+    static void swap(reference __x, reference __y) _NOEXCEPT { _VSTD::swap(__x, __y); }
 
     void resize(size_type __sz, value_type __x = false);
     void flip() _NOEXCEPT;

Added: libcxx/trunk/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp?rev=265672&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp (added)
+++ libcxx/trunk/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp Thu Apr  7 09:20:31 2016
@@ -0,0 +1,31 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <vector>
+// vector<bool>
+
+// static void swap(reference x, reference y) noexcept;
+
+#include <vector>
+#include <cassert>
+
+int main()
+{
+    bool a[] = {false, true, false, true};
+    bool* an = a + sizeof(a)/sizeof(a[0]);
+
+	std::vector<bool> v(a, an);
+	std::vector<bool>::reference r1 = v[0];
+	std::vector<bool>::reference r2 = v[3];
+	assert(!r1);
+	assert( r2);
+	v.swap(r1, r2);
+	assert( r1);
+	assert(!r2);
+}
\ No newline at end of file




More information about the cfe-commits mailing list