#pragma once #include namespace rublon { template < typename T > class NonOwningPtr { T * object; public: constexpr NonOwningPtr(T * obj) : object{obj} {} constexpr T * get() noexcept { assert(object != nullptr); return object; } constexpr const T * get() const noexcept { assert(object != nullptr); return object; } constexpr operator const T *() const noexcept { return get(); } constexpr operator T *() noexcept { return get(); } constexpr T * operator->() { return get(); } constexpr const T * operator->() const { return get(); } }; } // namespace rublon