From 14ec8e92b45a2eae5bdb3d459cee9633ea129359 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 10 Sep 2026 14:33:19 +0200 Subject: kstd/memory: introduce observer_ptr casts --- libs/kstd/kstd/bits/observer_ptr.hpp | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'libs') diff --git a/libs/kstd/kstd/bits/observer_ptr.hpp b/libs/kstd/kstd/bits/observer_ptr.hpp index d53ab5a0..d0c40549 100644 --- a/libs/kstd/kstd/bits/observer_ptr.hpp +++ b/libs/kstd/kstd/bits/observer_ptr.hpp @@ -160,6 +160,48 @@ namespace kstd return observer_ptr{pointer}; } + template + [[nodiscard]] constexpr auto static_pointer_cast(observer_ptr const & other) noexcept -> observer_ptr + { + return observer_ptr{static_cast::element_type *>(other.get())}; + } + + template + [[nodiscard]] constexpr auto static_pointer_cast(observer_ptr && other) noexcept -> observer_ptr + { + return observer_ptr{static_cast::element_type *>(std::move(other).get())}; + } + + template + [[nodiscard]] constexpr auto dynamic_pointer_cast(observer_ptr const & other) noexcept -> observer_ptr = delete; + + template + [[nodiscard]] constexpr auto dynamic_pointer_cast(observer_ptr && other) noexcept -> observer_ptr = delete; + + template + [[nodiscard]] constexpr auto const_pointer_cast(observer_ptr const & other) noexcept -> observer_ptr + { + return observer_ptr{const_cast::element_type *>(other.get())}; + } + + template + [[nodiscard]] constexpr auto const_pointer_cast(observer_ptr && other) noexcept -> observer_ptr + { + return observer_ptr{const_cast::element_type *>(other.get())}; + } + + template + [[nodiscard]] constexpr auto reinterpret_pointer_cast(observer_ptr const & other) noexcept -> observer_ptr + { + return observer_ptr{reinterpret_cast::element_type *>(other.get())}; + } + + template + [[nodiscard]] constexpr auto reinterpret_pointer_cast(observer_ptr && other) noexcept -> observer_ptr + { + return observer_ptr{reinterpret_cast::element_type *>(other.get())}; + } + } // namespace kstd #endif \ No newline at end of file -- cgit v1.2.3