#ifndef TEACHOS_BOOT_ASM_POINTER_HPP #define TEACHOS_BOOT_ASM_POINTER_HPP namespace teachos::boot { template struct asm_pointer { constexpr asm_pointer(Type & pointer) : m_pointer{&pointer} { } auto constexpr operator->() -> Type * { return m_pointer; } auto constexpr operator->() const -> Type const * { return m_pointer; } auto constexpr operator*() -> Type & { return *m_pointer; } auto constexpr operator*() const -> Type const & { return *m_pointer; } private: Type * m_pointer; }; template struct asm_pointer { constexpr asm_pointer(Type const & pointer) : m_pointer{&pointer} { } auto constexpr operator->() -> Type const * { return m_pointer; } auto constexpr operator->() const -> Type const * { return m_pointer; } auto constexpr operator*() -> Type const & { return *m_pointer; } auto constexpr operator*() const -> Type const & { return *m_pointer; } private: Type const * m_pointer; }; } // namespace teachos::boot #endif