9namespace opcua::detail {
14 constexpr UniqueOrRawPtr() =
default;
16 explicit constexpr UniqueOrRawPtr(std::unique_ptr<T>&& ptr) noexcept
17 : ptr_(std::move(ptr)) {}
19 explicit constexpr UniqueOrRawPtr(T* ptr) noexcept
22 constexpr UniqueOrRawPtr& operator=(std::unique_ptr<T>&& ptr)
noexcept {
23 ptr_ = std::move(ptr);
27 constexpr UniqueOrRawPtr& operator=(T* ptr)
noexcept {
32 constexpr T& operator*() noexcept {
36 constexpr const T& operator*() const noexcept {
40 constexpr T* operator->() noexcept {
44 constexpr const T* operator->() const noexcept {
48 constexpr T* get() noexcept {
51 [](T* ptr) {
return ptr; },
52 [](std::unique_ptr<T>& ptr) {
return ptr.get(); },
58 constexpr const T* get() const noexcept {
59 return (
const_cast<UniqueOrRawPtr*
>(
this)->get());
62 constexpr bool operator==(T* ptr)
const noexcept {
66 constexpr bool operator!=(T* ptr)
const noexcept {
71 std::variant<T*, std::unique_ptr<T>> ptr_{
nullptr};