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