xref: /llvm-project/libcxx/test/std/utilities/utility/forward/move.verify.cpp (revision b82dcb624e6bfa58ed566511cb564f8f201fa62e)
1*b82dcb62SLouis Dionne //===----------------------------------------------------------------------===//
2*b82dcb62SLouis Dionne //
3*b82dcb62SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*b82dcb62SLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5*b82dcb62SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*b82dcb62SLouis Dionne //
7*b82dcb62SLouis Dionne //===----------------------------------------------------------------------===//
8*b82dcb62SLouis Dionne 
9*b82dcb62SLouis Dionne // This test should pass in C++03 with Clang extensions because Clang does
10*b82dcb62SLouis Dionne // not implicitly delete the copy constructor when move constructors are
11*b82dcb62SLouis Dionne // defaulted using extensions.
12*b82dcb62SLouis Dionne 
13*b82dcb62SLouis Dionne // XFAIL: c++03
14*b82dcb62SLouis Dionne 
15*b82dcb62SLouis Dionne // test move
16*b82dcb62SLouis Dionne 
17*b82dcb62SLouis Dionne #include <utility>
18*b82dcb62SLouis Dionne #include <cassert>
19*b82dcb62SLouis Dionne 
20*b82dcb62SLouis Dionne struct move_only {
move_onlymove_only21*b82dcb62SLouis Dionne     move_only() {}
22*b82dcb62SLouis Dionne     move_only(move_only&&) = default;
23*b82dcb62SLouis Dionne     move_only& operator=(move_only&&) = default;
24*b82dcb62SLouis Dionne };
25*b82dcb62SLouis Dionne 
source()26*b82dcb62SLouis Dionne move_only source() {return move_only();}
csource()27*b82dcb62SLouis Dionne const move_only csource() {return move_only();}
28*b82dcb62SLouis Dionne 
test(move_only)29*b82dcb62SLouis Dionne void test(move_only) {}
30*b82dcb62SLouis Dionne 
main(int,char **)31*b82dcb62SLouis Dionne int main(int, char**)
32*b82dcb62SLouis Dionne {
33*b82dcb62SLouis Dionne   const move_only ca = move_only();
34*b82dcb62SLouis Dionne   // expected-error@+1 {{call to implicitly-deleted copy constructor of 'move_only'}}
35*b82dcb62SLouis Dionne   test(std::move(ca));
36*b82dcb62SLouis Dionne 
37*b82dcb62SLouis Dionne   return 0;
38*b82dcb62SLouis Dionne }
39