#pragma once #include "asl/ptr.hpp" namespace asl { template<typename T> class object final { using wrapped = devoid_t<un_qual_t<typename ptr<T>::pointee>>; ASL_NO_UNIQUE_ADDRESS wrapped m_value; public: object() requires default_constructible<wrapped> = default; object(const object&) = default; object(object&&) = default; object& operator=(const object&) = default; object& operator=(object&&) = default; ~object() = default; }; } // namespace asl