27 constexpr CheckedPtr(std::nullptr_t)
noexcept : ptr_{
nullptr} {}
28 explicit constexpr CheckedPtr(T* ptr)
noexcept : ptr_{ptr} {}
30 explicit constexpr operator
bool()
const noexcept {
42 T* Get() && { RvalueDisabled(); }
44 T* operator->()
const& {
return Get(); }
45 T* operator->() && { RvalueDisabled(); }
47 T& operator*()
const& {
return *Get(); }
48 T& operator*() && { RvalueDisabled(); }
52 static_assert(!
sizeof(T),
"Don't use temporary CheckedPtr, check it first, then dereference");
55 void CheckPointer()
const {
57 UASSERT_MSG(checked_,
"CheckedPtr contents were not checked before dereferencing");
59 if (!ptr_) impl::ThrowEmptyCheckedPointerException();
62 mutable bool checked_{
false};