/* * Copyright (C) 2019-2025 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include namespace NEO { class NonCopyableAndNonMovableClass { public: NonCopyableAndNonMovableClass() = default; NonCopyableAndNonMovableClass(const NonCopyableAndNonMovableClass &) = delete; NonCopyableAndNonMovableClass &operator=(const NonCopyableAndNonMovableClass &) = delete; NonCopyableAndNonMovableClass(NonCopyableAndNonMovableClass &&) = delete; NonCopyableAndNonMovableClass &operator=(NonCopyableAndNonMovableClass &&) = delete; }; class NonCopyableClass { public: NonCopyableClass() = default; NonCopyableClass(const NonCopyableClass &) = delete; NonCopyableClass &operator=(const NonCopyableClass &) = delete; NonCopyableClass(NonCopyableClass &&) = default; NonCopyableClass &operator=(NonCopyableClass &&) = default; }; template concept NonCopyable = ! std::is_copy_constructible_v && !std::is_copy_assignable_v; template concept NonMovable = ! std::is_move_constructible_v && !std::is_move_assignable_v; template concept NonCopyableAndNonMovable = NonCopyable && NonMovable; } // namespace NEO