/* * utility_staticpointer.hpp * * Created on: Jun 8, 2021 * Author: erki */ #ifndef SKULLC_UTILITY_STATICPOINTER_HPP_ #define SKULLC_UTILITY_STATICPOINTER_HPP_ #include namespace Utility { template struct StaticPointer { using value_type = T; alignas(value_type) unsigned char storage[sizeof(value_type)]; template value_type& setup(Args&&... args) { initialized_ = true; return *(new (storage) value_type(std::forward(args)...)); } value_type& operator*() const { return reinterpret_cast(storage); } value_type* operator->() const noexcept { return reinterpret_cast(storage); } constexpr explicit operator bool() const { return isInitialized(); } constexpr bool isInitialized() const { return initialized_; } private: bool initialized_ = false; }; }// namespace Utility #endif /* SKULLC_UTILITY_STATICPOINTER_HPP_ */