//===----------------------------------------------------------------------===// // // 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++03, c++11, c++14, c++17 // template // concept movable = see below; #include #include #include #include #include #include #include #include #include "test_macros.h" #ifndef TEST_HAS_NO_THREADS # include #endif #include "type_classification/moveconstructible.h" #include "type_classification/movable.h" // Movable types static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); struct S {}; static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable >); static_assert(std::movable >); static_assert(std::movable >); static_assert(std::movable > >); static_assert(std::movable >); static_assert(std::movable); static_assert(std::movable); // Not objects static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); // Core non-move assignable. static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(!std::movable); static_assert(!std::assignable_from); static_assert(!std::movable); static_assert(!std::movable); static_assert(std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(!std::movable); static_assert(std::movable); // `move_constructible and assignable_from` implies `swappable`, // so there's nothing to test for the case of non-swappable.