#pragma once #include namespace Scop { template NonOwningPtr::NonOwningPtr(T* ptr) : m_ptr(ptr) {} template NonOwningPtr::NonOwningPtr(NonOwningPtr&& ptr) noexcept : m_ptr(ptr.m_ptr) { ptr.m_ptr = nullptr; } template NonOwningPtr& NonOwningPtr::operator=(T* ptr) { m_ptr = ptr; return *this; } template NonOwningPtr& NonOwningPtr::operator=(NonOwningPtr&& ptr) noexcept { m_ptr = ptr.m_ptr; ptr.m_ptr = nullptr; return *this; } template NonOwningPtr::operator bool() const noexcept { return m_ptr != nullptr; } template T* NonOwningPtr::Get() const noexcept { return m_ptr; } template T* NonOwningPtr::operator->() const noexcept { return m_ptr; } template T& NonOwningPtr::operator*() const noexcept { return *m_ptr; } }