import CppUtils.Thread.SharedPtr;
import CppUtils;
constexpr WeakPtr::WeakPtr() noexcept = default;
constexpr WeakPtr::WeakPtr(std::nullptr_t) noexcept;
constexpr WeakPtr::WeakPtr(const SharedPtr<T>& shared) noexcept;
constexpr WeakPtr::~WeakPtr();
constexpr WeakPtr::WeakPtr(const WeakPtr& other) noexcept;
constexpr WeakPtr::WeakPtr(WeakPtr&& other) noexcept;
constexpr auto WeakPtr::operator=(const WeakPtr& other) noexcept -> WeakPtr&;
constexpr auto WeakPtr::operator=(WeakPtr&& other) noexcept -> WeakPtr&;
constexpr auto WeakPtr::operator=(const SharedPtr<T>& shared) noexcept -> WeakPtr&;
constexpr auto WeakPtr::operator=(std::nullptr_t) noexcept -> WeakPtr&;
constexpr auto WeakPtr::reset() noexcept -> void;
[[nodiscard]] constexpr auto WeakPtr::expired() const noexcept -> bool;
[[nodiscard]] constexpr auto WeakPtr::use_count() const noexcept -> std::size_t;
[[nodiscard]] constexpr auto WeakPtr::lock() const noexcept -> SharedPtr<T>;
[[nodiscard]] constexpr auto WeakPtr::owner_equal(const auto& other) const noexcept -> bool;
[[nodiscard]] constexpr auto WeakPtr::owner_before(const auto& other) const noexcept -> bool;