#pragma once #include #include namespace crepe { class Private { public: Private() = default; ~Private(); Private(Private &&); Private & operator=(Private &&); Private(const Private &) = delete; Private & operator=(const Private &) = delete; template T & get(); template void set(Args &&... args); bool empty() const noexcept; private: std::function destructor; std::type_index type = typeid(void); void * instance = nullptr; }; } #include "Private.hpp"