Backport
optional.hpp File Reference

This header provides definitions from the C++ header <optional> More...

#include "detail/config.hpp"
#include "detail/enable_overload.hpp"
#include "utility.hpp"
#include "functional.hpp"
#include "type_traits.hpp"
#include <initializer_list>
#include <type_traits>
#include <stdexcept>
#include <new>
+ Include dependency graph for optional.hpp:

Go to the source code of this file.

Classes

class  bpstd::optional< T >
 The class template optional manages an optional contained value, i.e. a value that may or may not be present. More...
 
class  bpstd::bad_optional_access
 An exception thrown when an optional is attempted to be accessed while not containing a value. More...
 
struct  bpstd::nullopt_t
 This type represents null optional value. More...
 
class  bpstd::optional< T >
 The class template optional manages an optional contained value, i.e. a value that may or may not be present. More...
 

Typedefs

template<typename T , typename U >
using bpstd::detail::optional_is_convertible = conjunction< std::is_constructible< T, optional< U > & >, std::is_constructible< T, const optional< U > & >, std::is_constructible< T, optional< U > && >, std::is_constructible< T, const optional< U > && >, std::is_convertible< optional< U > &, T >, std::is_convertible< const optional< U > &, T >, std::is_convertible< optional< U > &&, T >, std::is_convertible< const optional< U > &&, T > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_copy_convertible = conjunction< optional_is_convertible< T, U >, std::is_constructible< T, const U & > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_move_convertible = conjunction< optional_is_convertible< T, U >, std::is_constructible< T, U && > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_value_convertible = conjunction< std::is_constructible< T, U && >, negation< std::is_same< decay_t< U >, in_place_t > >, negation< std::is_same< decay_t< U >, optional< T > >> >
 
template<typename T , typename U >
using bpstd::detail::optional_is_convert_assignable = conjunction< optional_is_convertible< T, U >, std::is_assignable< T &, optional< U > & >, std::is_assignable< T &, const optional< U > & >, std::is_assignable< T &, optional< U > && >, std::is_assignable< T &, const optional< U > && > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_copy_convert_assignable = conjunction< optional_is_convert_assignable< T, U >, std::is_constructible< T, const U & >, std::is_assignable< T &, const U & > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_move_convert_assignable = conjunction< optional_is_convert_assignable< T, U >, std::is_constructible< T, U && >, std::is_assignable< T &, U && > >
 
template<typename T , typename U >
using bpstd::detail::optional_is_value_assignable = conjunction< negation< std::is_same< decay_t< U >, optional< T > >>, std::is_constructible< T, U >, std::is_assignable< T, U >, disjunction< negation< std::is_same< decay_t< U >, T > >, negation< std::is_scalar< T > > > >
 

Functions

template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator== (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator!= (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator< (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator> (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator<= (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
BPSTD_CPP14_CONSTEXPR bool bpstd::operator>= (const optional< T > &lhs, const optional< T > &rhs)
 
template<typename T >
constexpr bool bpstd::operator== (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator== (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator!= (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator!= (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator< (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator< (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator> (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator> (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator<= (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator<= (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator>= (const optional< T > &opt, nullopt_t) noexcept
 
template<typename T >
constexpr bool bpstd::operator>= (nullopt_t, const optional< T > &opt) noexcept
 
template<typename T >
constexpr bool bpstd::operator== (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator== (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr bool bpstd::operator!= (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator!= (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr bool bpstd::operator< (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator< (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr bool bpstd::operator> (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator> (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr bool bpstd::operator<= (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator<= (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr bool bpstd::operator>= (const optional< T > &opt, const T &value)
 
template<typename T >
constexpr bool bpstd::operator>= (const T &value, const optional< T > &opt)
 
template<typename T >
constexpr optional< decay_t< T > > bpstd::make_optional (T &&value)
 Creates an optional object from value. More...
 
template<typename T , typename... Args>
constexpr optional< T > bpstd::make_optional (Args &&... args)
 Creates an optional object of type T from the given args. More...
 
template<typename T , typename U , typename... Args>
constexpr optional< T > bpstd::make_optional (std::initializer_list< U > il, Args &&... args)
 Creates an optional object of type T from the given il args. More...
 
template<typename T >
void bpstd::swap (optional< T > &lhs, optional< T > &rhs)
 Swaps lhs and rhs. More...
 

Variables

constexpr nullopt_t bpstd::nullopt = nullopt_t{0}
 Instance of a nullopt type.
 

Detailed Description

This header provides definitions from the C++ header <optional>

Definition in file optional.hpp.

Function Documentation

◆ make_optional() [1/3]

template<typename T , typename... Args>
constexpr optional<T> bpstd::make_optional ( Args &&...  args)
constexpr

Creates an optional object of type T from the given args.

Template Parameters
Tthe type to construct
Parameters
argsthe arguments to pass to T's constructor

◆ make_optional() [2/3]

template<typename T , typename U , typename... Args>
constexpr optional<T> bpstd::make_optional ( std::initializer_list< U >  il,
Args &&...  args 
)
constexpr

Creates an optional object of type T from the given il args.

Template Parameters
Tthe type to construct
Parameters
ilthe initializer list to pass
argsthe arguments to pass to T's constructor

◆ make_optional() [3/3]

template<typename T >
constexpr optional<decay_t<T> > bpstd::make_optional ( T &&  value)
constexpr

Creates an optional object from value.

Parameters
valuethe value to construct the optional from

◆ swap()

template<typename T >
void bpstd::swap ( optional< T > &  lhs,
optional< T > &  rhs 
)

Swaps lhs and rhs.

Parameters
lhsthe left optional to swap
rhsthe right optional to swap