Arene Base
Fundamental Utilities For Safety Critical C++
Loading...
Searching...
No Matches
arene::base::non_owning_ptr< T > Class Template Reference

A non-owning, nullable pointer with nullptr checks on dereference. More...

Inheritance diagram for arene::base::non_owning_ptr< T >:
Inheritance graph

Public Types

using element_type = T
 The type of the element pointed to.
 
using pointer = T*
 The type of a pointer to T.
 
using reference = T&
 The type of a reference to T.
 

Public Member Functions

constexpr non_owning_ptr () noexcept=default
 Default, trivial constructor.
 
template<typename U = element_type, constraints< std::enable_if_t< std::is_convertible< typename non_owning_ptr< U >::pointer, pointer >::value > > = nullptr>
constexpr non_owning_ptr (non_owning_ptr< U > new_ptr) noexcept
 Constructor from non_owning_ptr convertible to the held type.
 
constexpr non_owning_ptr (pointer new_ptr) noexcept
 Constructor from a pointer to T.
 
constexpr non_owning_ptr (std::nullptr_t) noexcept
 Constructor from nullptr.
 
template<typename U = pointer, constraints< std::enable_if_t< std::is_pointer< U >::value >, std::enable_if_t< std::is_convertible< U, pointer >::value > > = nullptr>
constexpr non_owning_ptr (U new_ptr) noexcept
 Constructor from a raw pointer convertible to the held type.
 
ARENE_NODISCARD constexpr auto get () const noexcept -> pointer
 Accesses the held pointer directly.
 
ARENE_NODISCARD constexpr operator bool () const noexcept
 Conversion to bool.
 
template<typename U, constraints< std::enable_if_t<!is_non_owning_ptr_v< U > >, std::enable_if_t< std::is_convertible< pointer, U >::value > > = nullptr>
constexpr operator U () const noexcept
 Conversion operator to pointer-like type.
 
ARENE_NODISCARD constexpr auto operator! () const noexcept -> bool
 Boolean negation operator.
 
ARENE_NODISCARD constexpr auto operator* () const noexcept -> reference
 Dereference operator.
 
ARENE_NODISCARD constexpr auto operator-> () const noexcept -> pointer
 Arrow operator.
 
template<typename U = pointer, constraints< std::enable_if_t< std::is_pointer< U >::value >, std::enable_if_t< std::is_convertible< U, pointer >::value > > = nullptr>
constexpr void reset (U new_ptr=nullptr)
 Resets the held pointer to a new value.
 
template<typename I>
constexpr auto operator[] (I)=delete
 Pointer arithmetic is explicitly deleted.
 
template<typename I>
constexpr auto operator[] (I) const =delete
 Pointer arithmetic is explicitly deleted.
 
template<typename I>
constexpr auto operator+ (I const &) const -> non_owning_ptr=delete
 Pointer arithmetic is explicitly deleted.
 
template<typename I>
constexpr auto operator- (I const &) const -> non_owning_ptr=delete
 Pointer arithmetic is explicitly deleted.
 
constexpr auto operator++ () -> non_owning_ptr &=delete
 Pointer arithmetic is explicitly deleted.
 
constexpr auto operator++ (int) -> non_owning_ptr &=delete
 Pointer arithmetic is explicitly deleted.
 
constexpr auto operator-- () -> non_owning_ptr &=delete
 Pointer arithmetic is explicitly deleted.
 
constexpr auto operator-- (int) -> non_owning_ptr &=delete
 Pointer arithmetic is explicitly deleted.
 

Friends

ARENE_NODISCARD friend constexpr auto operator== (non_owning_ptr const &lhs, non_owning_ptr const &rhs) noexcept -> bool
 6-way comparison is equivalent to comparing raw pointers.
 
ARENE_NODISCARD friend constexpr auto operator< (non_owning_ptr const &lhs, non_owning_ptr const &rhs) noexcept -> bool
 6-way comparison is equivalent to comparing raw pointers.
 
- Friends inherited from arene::base::full_equality_operators_from_basic_equality< Derived, Other >

Detailed Description

template<typename T>
class arene::base::non_owning_ptr< T >

A non-owning, nullable pointer with nullptr checks on dereference.

Template Parameters
TThe type pointed to by the pointer.

A non_owning_ptr<T> models T* with the following differences:

  • Dereferencing non_owning_ptr<T> has defined behavior: an ARENE_PRECONDITION violation.
  • The arithmetic operations are deleted.
  • delete 'ing the held object through the non_owning_ptr is unsupported.

Member Typedef Documentation

◆ element_type

template<typename T>
using arene::base::non_owning_ptr< T >::element_type = T

The type of the element pointed to.

◆ pointer

template<typename T>
using arene::base::non_owning_ptr< T >::pointer = T*

The type of a pointer to T.

◆ reference

template<typename T>
using arene::base::non_owning_ptr< T >::reference = T&

The type of a reference to T.

Constructor & Destructor Documentation

◆ non_owning_ptr() [1/5]

template<typename T>
arene::base::non_owning_ptr< T >::non_owning_ptr ( )
constexprdefaultnoexcept

Default, trivial constructor.

Postcondition
Behavior is equivalent to constructing a raw pointer: If explicit, get() will return nullptr, otherwise the state is undefined.

◆ non_owning_ptr() [2/5]

template<typename T>
arene::base::non_owning_ptr< T >::non_owning_ptr ( std::nullptr_t )
inlineconstexprnoexcept

Constructor from nullptr.

Postcondition
get() returns nullptr.

◆ non_owning_ptr() [3/5]

template<typename T>
arene::base::non_owning_ptr< T >::non_owning_ptr ( pointer new_ptr)
inlineconstexprnoexcept

Constructor from a pointer to T.

Parameters
new_ptrThe pointer to hold.
Postcondition
get() returns new_ptr

◆ non_owning_ptr() [4/5]

template<typename T>
template<typename U = element_type, constraints< std::enable_if_t< std::is_convertible< typename non_owning_ptr< U >::pointer, pointer >::value > > = nullptr>
arene::base::non_owning_ptr< T >::non_owning_ptr ( non_owning_ptr< U > new_ptr)
inlineconstexprnoexcept

Constructor from non_owning_ptr convertible to the held type.

Template Parameters
Uthe element type of the non_owning_ptr to convert from. Must be pointer-convertible to pointer.
Parameters
new_ptrThe pointer to hold.
Postcondition
get() returns new_ptr converted to pointer.

◆ non_owning_ptr() [5/5]

template<typename T>
template<typename U = pointer, constraints< std::enable_if_t< std::is_pointer< U >::value >, std::enable_if_t< std::is_convertible< U, pointer >::value > > = nullptr>
arene::base::non_owning_ptr< T >::non_owning_ptr ( U new_ptr)
inlineconstexprnoexcept

Constructor from a raw pointer convertible to the held type.

Template Parameters
Uthe pointer type to convert from. Must be convertible to pointer .
Parameters
new_ptrThe pointer to hold.
Postcondition
get() returns new_ptr converted to pointer .

Member Function Documentation

◆ get()

template<typename T>
ARENE_NODISCARD constexpr auto arene::base::non_owning_ptr< T >::get ( ) const -> pointer
inlineconstexprnoexcept

Accesses the held pointer directly.

Returns
pointer The held pointer

◆ operator bool()

template<typename T>
ARENE_NODISCARD constexpr arene::base::non_owning_ptr< T >::operator bool ( ) const
inlineexplicitconstexprnoexcept

Conversion to bool.

Returns
true If get() != nullptr.
false If get() == nullptr.

◆ operator U()

template<typename T>
template<typename U, constraints< std::enable_if_t<!is_non_owning_ptr_v< U > >, std::enable_if_t< std::is_convertible< pointer, U >::value > > = nullptr>
arene::base::non_owning_ptr< T >::operator U ( ) const
inlineexplicitconstexprnoexcept

Conversion operator to pointer-like type.

Template Parameters
Uthe type to convert to. Must be convertible from pointer .
Returns
U The held pointer, converted to U

◆ operator!()

template<typename T>
ARENE_NODISCARD constexpr auto arene::base::non_owning_ptr< T >::operator! ( ) const -> bool
inlineconstexprnoexcept

Boolean negation operator.

Returns
true If get() == nullptr
false If get() != nullptr

◆ operator*()

template<typename T>
ARENE_NODISCARD constexpr auto arene::base::non_owning_ptr< T >::operator* ( ) const -> reference
inlineconstexprnoexcept

Dereference operator.

Precondition
get() != nullptr, otherwise an ARENE_PRECONDITION violation.
Returns
reference_type A reference to the object pointed to

◆ operator+()

template<typename T>
template<typename I>
auto arene::base::non_owning_ptr< T >::operator+ ( I const & ) const -> non_owning_ptr=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator++() [1/2]

template<typename T>
auto arene::base::non_owning_ptr< T >::operator++ ( ) -> non_owning_ptr &=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator++() [2/2]

template<typename T>
auto arene::base::non_owning_ptr< T >::operator++ ( int ) -> non_owning_ptr &=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator-()

template<typename T>
template<typename I>
auto arene::base::non_owning_ptr< T >::operator- ( I const & ) const -> non_owning_ptr=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator--() [1/2]

template<typename T>
auto arene::base::non_owning_ptr< T >::operator-- ( ) -> non_owning_ptr &=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator--() [2/2]

template<typename T>
auto arene::base::non_owning_ptr< T >::operator-- ( int ) -> non_owning_ptr &=delete
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator->()

template<typename T>
ARENE_NODISCARD constexpr auto arene::base::non_owning_ptr< T >::operator-> ( ) const -> pointer
inlineconstexprnoexcept

Arrow operator.

Precondition
get() != nullptr, otherwise an ARENE_PRECONDITION violation.
Returns
pointer The held pointer

◆ operator[]() [1/2]

template<typename T>
template<typename I>
auto arene::base::non_owning_ptr< T >::operator[] ( I ) const
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ operator[]() [2/2]

template<typename T>
template<typename I>
auto arene::base::non_owning_ptr< T >::operator[] ( I )
constexprdelete

Pointer arithmetic is explicitly deleted.

◆ reset()

template<typename T>
template<typename U = pointer, constraints< std::enable_if_t< std::is_pointer< U >::value >, std::enable_if_t< std::is_convertible< U, pointer >::value > > = nullptr>
void arene::base::non_owning_ptr< T >::reset ( U new_ptr = nullptr)
inlineconstexpr

Resets the held pointer to a new value.

Template Parameters
Uthe pointer type to convert from. Must be convertible to pointer .
Parameters
new_ptrThe pointer to reset from. Defaults to nullptr.
Postcondition
get() returns new_ptr converted to pointer .

Friends And Related Symbol Documentation

◆ operator<

template<typename T>
ARENE_NODISCARD friend constexpr auto operator< ( non_owning_ptr< T > const & lhs,
non_owning_ptr< T > const & rhs ) -> bool
friend

6-way comparison is equivalent to comparing raw pointers.

Parameters
lhsThe first value to compare
rhsThe second value to compare
Returns
The result of the comparison of the underlying pointers

◆ operator==

template<typename T>
ARENE_NODISCARD friend constexpr auto operator== ( non_owning_ptr< T > const & lhs,
non_owning_ptr< T > const & rhs ) -> bool
friend

6-way comparison is equivalent to comparing raw pointers.

Parameters
lhsThe first value to compare
rhsThe second value to compare
Returns
The result of the comparison of the underlying pointers

The documentation for this class was generated from the following file: