#pragma once namespace PortabilityLayer { template class UnalignedPtr { public: UnalignedPtr(); explicit UnalignedPtr(const T *ref); const T *GetRawPtr() const; T Get() const; private: const T *m_ref; }; template UnalignedPtr::UnalignedPtr() : m_ref(nullptr) { } template UnalignedPtr::UnalignedPtr(const T *ref) : m_ref(ref) { } } #include namespace PortabilityLayer { template const T *UnalignedPtr::GetRawPtr() const { return m_ref; } template T UnalignedPtr::Get() const { T result; memcpy(&result, m_ref, sizeof(T)); return result; } }