From 8d48d9b2cc39c943419308a410f55a09190de32b Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Mon, 7 Mar 2016 21:57:10 +0000 Subject: [PATCH] non-member swap for array was mistakenly taking const ref params. Fixed and added test. Thanks to Ben Craig for the catch git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262866 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/array | 2 +- .../sequences/array/array.swap/swap.pass.cpp | 29 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/array b/include/array index 8866eaf6b..f0350ea21 100644 --- a/include/array +++ b/include/array @@ -279,7 +279,7 @@ typename enable_if __is_swappable<_Tp>::value, void >::type -swap(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y) +swap(array<_Tp, _Size>& __x, array<_Tp, _Size>& __y) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value) { __x.swap(__y); diff --git a/test/std/containers/sequences/array/array.swap/swap.pass.cpp b/test/std/containers/sequences/array/array.swap/swap.pass.cpp index 651798e1e..91ebe419a 100644 --- a/test/std/containers/sequences/array/array.swap/swap.pass.cpp +++ b/test/std/containers/sequences/array/array.swap/swap.pass.cpp @@ -10,9 +10,10 @@ // // void swap(array& a); +// namespace std { void swap(array &x, array &y); -#include #include +#include // std::array is explicitly allowed to be initialized with A a = { init-list };. // Disable the missing braces warning for this reason. @@ -35,6 +36,22 @@ int main() assert(c2[1] == 2); assert(c2[2] == 3.5); } + { + typedef double T; + typedef std::array C; + C c1 = {1, 2, 3.5}; + C c2 = {4, 5, 6.5}; + std::swap(c1, c2); + assert(c1.size() == 3); + assert(c1[0] == 4); + assert(c1[1] == 5); + assert(c1[2] == 6.5); + assert(c2.size() == 3); + assert(c2[0] == 1); + assert(c2[1] == 2); + assert(c2[2] == 3.5); + } + { typedef double T; typedef std::array C; @@ -44,4 +61,14 @@ int main() assert(c1.size() == 0); assert(c2.size() == 0); } + { + typedef double T; + typedef std::array C; + C c1 = {}; + C c2 = {}; + std::swap(c1, c2); + assert(c1.size() == 0); + assert(c2.size() == 0); + } + }