| //===----------------------------------------------------------------------===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef TEST_SUPPORT_TYPE_CLASSIFICATION_COPYABLE_H |
| #define TEST_SUPPORT_TYPE_CLASSIFICATION_COPYABLE_H |
| |
| #include <memory> |
| |
| #include "movable.h" |
| |
| struct no_copy_constructor { |
| no_copy_constructor() = default; |
| |
| no_copy_constructor(no_copy_constructor const&) = delete; |
| no_copy_constructor(no_copy_constructor&&) = default; |
| }; |
| |
| struct no_copy_assignment { |
| no_copy_assignment() = default; |
| |
| no_copy_assignment& operator=(no_copy_assignment const&) = delete; |
| no_copy_assignment& operator=(no_copy_assignment&&) = default; |
| }; |
| |
| struct no_copy_assignment_mutable { |
| no_copy_assignment_mutable() = default; |
| |
| no_copy_assignment_mutable& |
| operator=(no_copy_assignment_mutable const&) = default; |
| no_copy_assignment_mutable& operator=(no_copy_assignment_mutable&) = delete; |
| no_copy_assignment_mutable& operator=(no_copy_assignment_mutable&&) = default; |
| }; |
| |
| struct derived_from_noncopyable : std::unique_ptr<int> {}; |
| |
| struct has_noncopyable { |
| std::unique_ptr<int> x; |
| }; |
| |
| struct const_copy_assignment { |
| const_copy_assignment() = default; |
| |
| const_copy_assignment(const_copy_assignment const&); |
| const_copy_assignment(const_copy_assignment&&); |
| |
| const_copy_assignment& operator=(const_copy_assignment&&); |
| const_copy_assignment const& operator=(const_copy_assignment const&) const; |
| }; |
| |
| struct volatile_copy_assignment { |
| volatile_copy_assignment() = default; |
| |
| volatile_copy_assignment(volatile_copy_assignment volatile&); |
| volatile_copy_assignment(volatile_copy_assignment volatile&&); |
| |
| volatile_copy_assignment& operator=(volatile_copy_assignment&&); |
| volatile_copy_assignment volatile& |
| operator=(volatile_copy_assignment const&) volatile; |
| }; |
| |
| struct cv_copy_assignment { |
| cv_copy_assignment() = default; |
| |
| cv_copy_assignment(cv_copy_assignment const volatile&); |
| cv_copy_assignment(cv_copy_assignment const volatile&&); |
| |
| cv_copy_assignment const volatile& |
| operator=(cv_copy_assignment const volatile&) const volatile; |
| cv_copy_assignment const volatile& |
| operator=(cv_copy_assignment const volatile&&) const volatile; |
| }; |
| |
| #endif // TEST_SUPPORT_TYPE_CLASSIFICATION_COPYABLE_H |