AsmGrader 0.0.0
Loading...
Searching...
No Matches
class_traits.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <type_traits>
5
6namespace asmgrader {
7
14{
15public:
16 NonCopyable() = default;
17
19 NonCopyable(const NonCopyable&) = delete;
20
23
24 ~NonCopyable() = default;
25};
26
27static_assert(std::is_trivially_constructible_v<NonCopyable> && !std::is_copy_assignable_v<NonCopyable> &&
28 !std::is_copy_constructible_v<NonCopyable> && std::is_trivially_move_assignable_v<NonCopyable> &&
29 std::is_trivially_move_constructible_v<NonCopyable>,
30 "Class non_copyable should be trivially constructible and movable, not copyable");
31
37class NonMovable : public NonCopyable
38{
39public:
40 NonMovable() = default;
41
42 NonMovable(const NonMovable&) = delete;
43 NonMovable& operator=(const NonMovable&) = delete;
44
47
48 ~NonMovable() = default;
49};
50
51static_assert(std::is_trivially_constructible_v<NonMovable> && std::is_trivially_copyable_v<NonMovable> &&
52 !std::is_copy_assignable_v<NonMovable> && !std::is_copy_constructible_v<NonMovable> &&
53 !std::is_move_assignable_v<NonMovable> && !std::is_move_constructible_v<NonMovable>,
54 "Class non_movable should be trivially constructible, but neither copyable nor movable");
55
56// Credit to: https://stackoverflow.com/a/77263105
57template <typename T>
58concept ChronoDuration = requires {
59 []<class Rep, class Period>(std::type_identity<std::chrono::duration<Rep, Period>>) {}(std::type_identity<T>());
60};
61
62} // namespace asmgrader
A trivially-movable, but non-copyable type.
Definition class_traits.hpp:14
NonCopyable(const NonCopyable &)=delete
NonCopyable & operator=(const NonCopyable &)=delete
NonCopyable & operator=(NonCopyable &&)=default
NonCopyable(NonCopyable &&)=default
A non-movable and non-copyable type.
Definition class_traits.hpp:38
NonMovable(const NonMovable &)=delete
NonMovable & operator=(const NonMovable &)=delete
NonMovable & operator=(NonMovable &&)=delete
NonMovable(NonMovable &&)=delete
Definition class_traits.hpp:58
Definition asm_buffer.hpp:19