25#define DISABLE_COPY(TypeName) TypeName(const TypeName &) = delete
28#define DISABLE_ASSIGN(TypeName) void operator=(const TypeName &) = delete
32#define DISABLE_COPY_AND_ASSIGN(TypeName) \
33 DISABLE_COPY(TypeName); \
34 DISABLE_ASSIGN(TypeName)
42#define DISABLE_IMPLICIT_CONSTRUCTORS(TypeName) \
43 TypeName() = delete; \
44 DISABLE_COPY_AND_ASSIGN(TypeName)
47#define MAKE_SINGLETON(TypeName) \
49 static TypeName *Instance() { \
50 static TypeName Instance; \
55 DISABLE_COPY_AND_ASSIGN(TypeName)
60template <
class T,
size_t N>
constexpr size_t array_size(T(&)[N])