[libc++] Add a test for resizing of a vector with copy-only elements See https://reviews.llvm.org/D62228#1658620 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@371067 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/std/containers/sequences/vector/vector.modifiers/resize.copy_only.pass.sh.cpp b/test/std/containers/sequences/vector/vector.modifiers/resize.copy_only.pass.sh.cpp new file mode 100644 index 0000000..b24736e --- /dev/null +++ b/test/std/containers/sequences/vector/vector.modifiers/resize.copy_only.pass.sh.cpp
@@ -0,0 +1,45 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03 + +// RUN: %build -fno-exceptions +// RUN: %run + +// RUN: %build +// RUN: %run + +// UNSUPPORTED: c++98, c++03 + +// <vector> + +// Test that vector won't try to call the move constructor when resizing if +// the class has a deleted move constructor (but a working copy constructor). + +#include <vector> + +class CopyOnly { +public: + CopyOnly() { } + + CopyOnly(CopyOnly&&) = delete; + CopyOnly& operator=(CopyOnly&&) = delete; + + CopyOnly(const CopyOnly&) = default; + CopyOnly& operator=(const CopyOnly&) = default; +}; + +int main() { + std::vector<CopyOnly> x; + x.emplace_back(); + + CopyOnly c; + x.push_back(c); + + return 0; +}