1 // Copyright (C) 2019-2020 Free Software Foundation, Inc. 2 // 3 // This file is part of the GNU ISO C++ Library. This library is free 4 // software; you can redistribute it and/or modify it under the 5 // terms of the GNU General Public License as published by the 6 // Free Software Foundation; either version 3, or (at your option) 7 // any later version. 8 9 // This library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 14 // You should have received a copy of the GNU General Public License along 15 // with this library; see the file COPYING3. If not see 16 // <http://www.gnu.org/licenses/>. 17 18 // { dg-do compile { target c++11 } } 19 20 #include <memory> 21 22 struct Del { 23 Del() = default; 24 Del(Del&&) = delete; 25 26 void operator()(int*) const; 27 }; 28 29 static_assert(!std::is_move_constructible<std::unique_ptr<int, Del>>::value); 30 static_assert(std::is_move_constructible<std::unique_ptr<int, Del&>>::value); 31 32 struct Del2 { 33 Del2() = default; 34 Del2(Del2&&) = default; 35 Del2& operator=(Del2&&) = delete; 36 Del2& operator=(const Del2&) = default; 37 38 void operator()(int*) const; 39 }; 40 41 static_assert(!std::is_move_assignable<std::unique_ptr<int, Del2>>::value); 42 static_assert(std::is_move_assignable<std::unique_ptr<int, Del2&>>::value); 43 44 struct Del3 { 45 Del3() = default; 46 Del3(Del3&&) = default; 47 Del3& operator=(Del3&&) = default; 48 Del3& operator=(const Del3&) = delete; 49 50 void operator()(int*) const; 51 }; 52 53 static_assert(std::is_move_assignable<std::unique_ptr<int, Del3>>::value); 54 static_assert(!std::is_move_assignable<std::unique_ptr<int, Del3&>>::value); 55