#pragma once namespace util { template class IncompleteTypeDeleter { public: void operator()(T *wrapped_ptr) const { auto ptr = reinterpret_cast(wrapped_ptr); delete[] ptr; } }; template using unique_plain_ptr = std::unique_ptr>; template inline std::unique_ptr> make_unique_plain(size_t size) { return unique_plain_ptr(reinterpret_cast(new uint8_t[size])); } }