M5Utility 0.0.2 git rev:5c1a751
Loading...
Searching...
No Matches
m5::stl::optional< T & > Class Template Reference

#include <optional.hpp>

Public Types

using value_type = T &
 

Public Member Functions

template<class F >
TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t< F, T & > and_then (F &&f) &
 
template<class F >
TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t< F, T & > and_then (F &&f) &&
 
template<class F >
constexpr detail::invoke_result_t< F, const T & > and_then (F &&f) const &
 
template<class F >
constexpr detail::invoke_result_t< F, const T & > and_then (F &&f) const &&
 
template<class F >
TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declval< optional & >(), std::declval< F && >())) map (F &&f) &
 Carries out some operation on the stored object if there is one.
 
template<class F >
TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declval< optional && >(), std::declval< F && >())) map (F &&f) &&
 
template<class F >
constexpr decltype(detail::optional_map_impl(std::declval< const optional & >(), std::declval< F && >())) map (F &&f) const &
 
template<class F >
constexpr decltype(detail::optional_map_impl(std::declval< const optional && >(), std::declval< F && >())) map (F &&f) const &&
 
template<class F >
TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declval< optional & >(), std::declval< F && >())) transform (F &&f) &
 Carries out some operation on the stored object if there is one.
 
template<class F >
TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declval< optional && >(), std::declval< F && >())) transform (F &&f) &&
 
template<class F >
constexpr decltype(detail::optional_map_impl(std::declval< const optional & >(), std::declval< F && >())) transform (F &&f) const &
 
template<class F >
constexpr decltype(detail::optional_map_impl(std::declval< const optional && >(), std::declval< F && >())) transform (F &&f) const &&
 
template<class F , detail::enable_if_ret_void< F > * = nullptr>
optional< T > TL_OPTIONAL_11_CONSTEXPR or_else (F &&f) &
 Calls f if the optional is empty.
 
template<class F , detail::disable_if_ret_void< F > * = nullptr>
optional< T > TL_OPTIONAL_11_CONSTEXPR or_else (F &&f) &
 
template<class F , detail::enable_if_ret_void< F > * = nullptr>
optional< T > or_else (F &&f) &&
 
template<class F , detail::disable_if_ret_void< F > * = nullptr>
optional< T > TL_OPTIONAL_11_CONSTEXPR or_else (F &&f) &&
 
template<class F , detail::enable_if_ret_void< F > * = nullptr>
optional< T > or_else (F &&f) const &
 
template<class F , detail::disable_if_ret_void< F > * = nullptr>
optional< T > TL_OPTIONAL_11_CONSTEXPR or_else (F &&f) const &
 
template<class F , detail::enable_if_ret_void< F > * = nullptr>
optional< T > or_else (F &&f) const &&
 
template<class F , detail::disable_if_ret_void< F > * = nullptr>
optional< T > or_else (F &&f) const &&
 
template<class F , class U >
map_or (F &&f, U &&u) &
 Maps the stored value with f if there is one, otherwise returns u
 
template<class F , class U >
map_or (F &&f, U &&u) &&
 
template<class F , class U >
map_or (F &&f, U &&u) const &
 
template<class F , class U >
map_or (F &&f, U &&u) const &&
 
template<class F , class U >
detail::invoke_result_t< U > map_or_else (F &&f, U &&u) &
 
template<class F , class U >
detail::invoke_result_t< U > map_or_else (F &&f, U &&u) &&
 
template<class F , class U >
detail::invoke_result_t< U > map_or_else (F &&f, U &&u) const &
 
template<class F , class U >
detail::invoke_result_t< U > map_or_else (F &&f, U &&u) const &&
 
template<class U >
constexpr optional< typename std::decay< U >::type > conjunction (U &&u) const
 Returns u if *this has a value, otherwise an empty optional.
 
TL_OPTIONAL_11_CONSTEXPR optional disjunction (const optional &rhs) &
 Returns rhs if *this is empty, otherwise the current value.
 
constexpr optional disjunction (const optional &rhs) const &
 
TL_OPTIONAL_11_CONSTEXPR optional disjunction (const optional &rhs) &&
 
constexpr optional disjunction (const optional &rhs) const &&
 
TL_OPTIONAL_11_CONSTEXPR optional disjunction (optional &&rhs) &
 
constexpr optional disjunction (optional &&rhs) const &
 
TL_OPTIONAL_11_CONSTEXPR optional disjunction (optional &&rhs) &&
 
constexpr optional disjunction (optional &&rhs) const &&
 
optional take ()
 Takes the value out of the optional, leaving it empty.
 
constexpr optional () noexcept
 Constructs an optional that does not contain a value.
 
constexpr optional (nullopt_t) noexcept
 
TL_OPTIONAL_11_CONSTEXPR optional (const optional &rhs) noexcept=default
 
TL_OPTIONAL_11_CONSTEXPR optional (optional &&rhs)=default
 
template<class U = T, detail::enable_if_t<!detail::is_optional< detail::decay_t< U > >::value > * = nullptr>
constexpr optional (U &&u) noexcept
 Constructs the stored value with u.
 
template<class U >
constexpr optional (const optional< U > &rhs) noexcept
 
 ~optional ()=default
 No-op.
 
optionaloperator= (nullopt_t) noexcept
 
optionaloperator= (const optional &rhs)=default
 
template<class U = T, detail::enable_if_t<!detail::is_optional< detail::decay_t< U > >::value > * = nullptr>
optionaloperator= (U &&u)
 Rebinds this optional to u.
 
template<class U >
optionaloperator= (const optional< U > &rhs) noexcept
 
template<class U = T, detail::enable_if_t<!detail::is_optional< detail::decay_t< U > >::value > * = nullptr>
optionalemplace (U &&u) noexcept
 Rebinds this optional to u.
 
void swap (optional &rhs) noexcept
 
constexpr const T * operator-> () const noexcept
 Returns a pointer to the stored value.
 
TL_OPTIONAL_11_CONSTEXPR T * operator-> () noexcept
 
TL_OPTIONAL_11_CONSTEXPR T & operator* () noexcept
 Returns the stored value.
 
constexpr const T & operator* () const noexcept
 
constexpr bool has_value () const noexcept
 
constexpr operator bool () const noexcept
 
TL_OPTIONAL_11_CONSTEXPR T & value ()
 Returns the contained value if there is one, otherwise throws bad_optional_access.
 
TL_OPTIONAL_11_CONSTEXPR const T & value () const
 
template<class U >
constexpr T value_or (U &&u) const &noexcept
 Returns the stored value if there is one, otherwise returns u
 
template<class U >
TL_OPTIONAL_11_CONSTEXPR T value_or (U &&u) &&noexcept
 \group value_or
 
void reset () noexcept
 Destroys the stored value if one exists, making the optional empty.
 

Detailed Description

template<class T>
class m5::stl::optional< T & >

Specialization for when T is a reference. optional<T&> acts similarly to a T*, but provides more operations and shows intent more clearly.

Constructor & Destructor Documentation

◆ optional() [1/2]

template<class T >
TL_OPTIONAL_11_CONSTEXPR m5::stl::optional< T & >::optional ( const optional< T & > & rhs)
defaultnoexcept

Copy constructor

If rhs contains a value, the stored value is direct-initialized with it. Otherwise, the constructed optional is empty.

◆ optional() [2/2]

template<class T >
TL_OPTIONAL_11_CONSTEXPR m5::stl::optional< T & >::optional ( optional< T & > && rhs)
default

Move constructor

If rhs contains a value, the stored value is direct-initialized with it. Otherwise, the constructed optional is empty.

Member Function Documentation

◆ and_then()

template<class T >
template<class F >
TL_OPTIONAL_11_CONSTEXPR detail::invoke_result_t< F, T & > m5::stl::optional< T & >::and_then ( F && f) &
inline

Carries out some operation which returns an optional on the stored object if there is one.

◆ map_or_else()

template<class T >
template<class F , class U >
detail::invoke_result_t< U > m5::stl::optional< T & >::map_or_else ( F && f,
U && u ) &
inline

Maps the stored value with f if there is one, otherwise calls u and returns the result.

◆ operator=() [1/3]

template<class T >
optional & m5::stl::optional< T & >::operator= ( const optional< T & > & rhs)
default

Copy assignment.

Rebinds this optional to the referee of rhs if there is one. Otherwise resets the stored value in *this.

◆ operator=() [2/3]

template<class T >
template<class U >
optional & m5::stl::optional< T & >::operator= ( const optional< U > & rhs)
inlinenoexcept

Converting copy assignment operator.

Rebinds this optional to the referee of rhs if there is one. Otherwise resets the stored value in *this.

◆ operator=() [3/3]

template<class T >
optional & m5::stl::optional< T & >::operator= ( nullopt_t )
inlinenoexcept

Assignment to empty.

Destroys the current value if there is one.

◆ transform()

template<class T >
template<class F >
TL_OPTIONAL_11_CONSTEXPR decltype(detail::optional_map_impl(std::declval< optional && >(), std::declval< F && >())) m5::stl::optional< T & >::transform ( F && f) &&
inline

\group map \synopsis template <class F> auto transform(F &&f) &&;