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 Dionnemove_only source() {return move_only();} csource()27*b82dcb62SLouis Dionneconst move_only csource() {return move_only();} 28*b82dcb62SLouis Dionne test(move_only)29*b82dcb62SLouis Dionnevoid test(move_only) {} 30*b82dcb62SLouis Dionne main(int,char **)31*b82dcb62SLouis Dionneint 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