Fix bug #27260 - add missing swap(reference, reference) to vector<bool>.
authorMarshall Clow <mclow.lists@gmail.com>
Thu, 7 Apr 2016 14:20:31 +0000 (14:20 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Thu, 7 Apr 2016 14:20:31 +0000 (14:20 +0000)
llvm-svn: 265672

libcxx/include/vector
libcxx/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp [new file with mode: 0644]

index 0e41335..81c514e 100644 (file)
@@ -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;
diff --git a/libcxx/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/reference.swap.pass.cpp
new file mode 100644 (file)
index 0000000..d76d4ed
--- /dev/null
@@ -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