1 // Copyright (C) 2019-2021 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-options "-std=gnu++2a" } 19 // { dg-do compile { target c++2a } } 20 21 #include <concepts> 22 23 static_assert( !std::move_constructible<void> ); 24 static_assert( std::move_constructible<void*> ); 25 static_assert( std::move_constructible<const void*> ); 26 static_assert( std::move_constructible<char> ); 27 static_assert( std::move_constructible<const float> ); 28 static_assert( std::move_constructible<int*> ); 29 static_assert( std::move_constructible<int&> ); 30 static_assert( std::move_constructible<int&&> ); 31 static_assert( std::move_constructible<const int&> ); 32 static_assert( !std::move_constructible<int[]> ); 33 static_assert( !std::move_constructible<int[2]> ); 34 static_assert( !std::move_constructible<int()> ); 35 static_assert( std::move_constructible<int(*)()> ); 36 static_assert( std::move_constructible<int(&)()> ); 37 static_assert( std::move_constructible<int(&)() noexcept> ); 38 39 enum E { }; 40 static_assert( std::move_constructible<E> ); 41 enum class CE { }; 42 static_assert( std::move_constructible<CE> ); 43 struct A { }; 44 static_assert( std::move_constructible<A> ); 45 union B { }; 46 static_assert( std::move_constructible<B> ); 47 48 struct C 49 { CC50 C(void* = nullptr) { } ~CC51 ~C() noexcept(false) { } 52 }; 53 static_assert( !std::move_constructible<C> ); 54 55 class D 56 { 57 public: D()58 D() { } D(int)59 D(int) { } 60 private: ~D()61 ~D() { } 62 }; 63 static_assert( !std::move_constructible<D> ); 64