1 #ifndef libjmmcg_core_non_allocatable_hpp
2 #define libjmmcg_core_non_allocatable_hpp
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include "debug_defines.hpp"
24
25 #include <new>
26
27 namespace jmmcg {
28
29
30 class non_newable {
31 static void * operator new(std::size_t) noexcept(false)=delete;
32 static void * operator new(std::size_t, const std::nothrow_t&) noexcept(true)=delete;
33 static void * operator new[](std::size_t) noexcept(false)=delete;
34 static void * operator new[](std::size_t, const std::nothrow_t&) noexcept(true)=delete;
35 static void * operator new(std::size_t, void *) noexcept(false)=delete;
36 static void * operator new[](std::size_t, void *) noexcept(false)=delete;
37 };
38
39 class non_deleteable {
40 static void operator delete(void *) noexcept(true)=delete;
41 static void operator delete(void *, const std::nothrow_t&) noexcept(true)=delete;
42 static void operator delete[](void *) noexcept(true)=delete;
43 static void operator delete[](void *, const std::nothrow_t&) noexcept(true)=delete;
44 static void operator delete(void *, void *) noexcept(true)=delete;
45 static void operator delete[](void *, void *) noexcept(true)=delete;
46 };
47
48 class non_allocatable : protected non_newable, protected non_deleteable {
49 };
50
51 class non_addressable {
52 void operator&()=delete;
53 };
54
55 }
56
57 #endif