mirror of
https://github.com/TartanLlama/optional.git
synced 2025-07-30 18:07:15 +02:00
Docs
This commit is contained in:
609
docs/index.md
Normal file
609
docs/index.md
Normal file
@ -0,0 +1,609 @@
|
||||
# Header file `optional.hpp`<a id="optional.hpp"></a>
|
||||
|
||||
<pre><code class="language-cpp">#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_11_CONSTEXPR</a>
|
||||
|
||||
#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_MSVC_2015_CONSTEXPR</a>
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>tl</a>
|
||||
{
|
||||
class <a href='doc_optional.md#optional.hpp'>monostate</a>;
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>detail</a>
|
||||
{
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_cv_t</a> = typename std::remove_cv<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_const_t</a> = typename std::remove_const<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_volatile_t</a> = typename std::remove_volatile<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_cv_t</a> = typename std::add_cv<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_const_t</a> = typename std::add_const<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_volatile_t</a> = typename std::add_volatile<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_reference_t</a> = typename std::remove_reference<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_lvalue_reference_t</a> = typename std::add_lvalue_reference<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_rvalue_reference_t</a> = typename std::add_rvalue_reference<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_pointer_t</a> = typename std::remove_pointer<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>add_pointer_t</a> = typename std::add_pointer<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>make_signed_t</a> = typename std::make_signed<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>make_unsigned_t</a> = typename std::make_unsigned<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_extent_t</a> = typename std::remove_extent<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>remove_all_extents_t</a> = typename std::remove_all_extents<T>::type;
|
||||
|
||||
template <<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> N, <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> A = N>
|
||||
using <a href='doc_optional.md#optional.hpp'>aligned_storage_t</a> = typename std::aligned_storage<N, A>::type;
|
||||
|
||||
template <<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> N, class ... Ts>
|
||||
using <a href='doc_optional.md#optional.hpp'>aligned_union_t</a> = typename std::aligned_union<N, Ts...>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>decay_t</a> = typename std::decay<T>::type;
|
||||
|
||||
template <bool E, class T = void>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_if_t</a> = typename std::enable_if<E, T>::type;
|
||||
|
||||
template <bool B, class T, class F>
|
||||
using <a href='doc_optional.md#optional.hpp'>conditional_t</a> = typename std::conditional<B, T, F>::type;
|
||||
|
||||
template <class ... Ts>
|
||||
using <a href='doc_optional.md#optional.hpp'>common_type_t</a> = typename std::common_type<Ts...>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>underlying_type_t</a> = typename std::underlying_type<T>::type;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>result_of_t</a> = typename std::result_of<T>::type;
|
||||
|
||||
template <class>
|
||||
struct <a href='doc_optional.md#optional.hpp'>conjunction</a>;
|
||||
|
||||
template <class B>
|
||||
struct <a href='doc_optional.md#optional.hpp'>conjunction<B></a>;
|
||||
|
||||
template <class B, class ... Bs>
|
||||
struct <a href='doc_optional.md#optional.hpp'>conjunction<B, Bs...></a>;
|
||||
|
||||
template <class>
|
||||
struct <a href='doc_optional.md#optional.hpp'>voider</a>;
|
||||
|
||||
template <class ... Ts>
|
||||
using <a href='doc_optional.md#optional.hpp'>void_t</a> = typename voider<Ts...>::type;
|
||||
|
||||
template <class T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_optional_impl</a>;
|
||||
|
||||
template <class T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_optional_impl<optional<T>></a>;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>is_optional</a> = <a href='doc_optional.md#optional.hpp'>is_optional_impl<decay_t<T>></a>;
|
||||
|
||||
template <typename Fn, typename ... Args, typename = enable_if_t<std::is_member_pointer<decay_t<Fn>>{}>, int=0>
|
||||
constexpr decltype(std::mem_fn(f)(std::forward<Args>(args)...)) <a href='doc_optional.md#optional.hpp'>invoke</a>(Fn&& f, Args&&... args) noexcept(noexcept(std::mem_fn(f)(std::forward<Args>(args)...)));
|
||||
|
||||
template <typename Fn, typename ... Args, typename = enable_if_t<!std::is_member_pointer<decay_t<Fn>>{}>>
|
||||
constexpr decltype(std::forward<Fn>(f)(std::forward<Args>(args)...)) <a href='doc_optional.md#optional.hpp'>invoke</a>(Fn&& f, Args&&... args) noexcept(noexcept(std::forward<Fn>(f)(std::forward<Args>(args)...)));
|
||||
|
||||
template <class F, class ... Us>
|
||||
struct <a href='doc_optional.md#optional.hpp'>invoke_result_impl<F, decltype(invoke(std::declval<F>(), std::declval<Us>()...), void()), Us...></a>;
|
||||
|
||||
template <class F, class ... Us>
|
||||
using <a href='doc_optional.md#optional.hpp'>invoke_result</a> = invoke_result_impl<F, void, Us...>;
|
||||
|
||||
template <class F, class ... Us>
|
||||
using <a href='doc_optional.md#optional.hpp'>invoke_result_t</a> = typename invoke_result<F, Us...>::type;
|
||||
|
||||
template <class U>
|
||||
using <a href='doc_optional.md#optional.hpp'>fixup_void</a> = <a href='doc_optional.md#optional.hpp'>conditional_t<std::is_void<U>::value, monostate, U></a>;
|
||||
|
||||
template <class F, class ... U>
|
||||
struct <a href='doc_optional.md#optional.hpp'>get_invoke_optional_ret</a>;
|
||||
|
||||
template <class F, class ... U>
|
||||
using <a href='doc_optional.md#optional.hpp'>get_invoke_ret</a> = typename conditional_t<is_optional<F>::value, get_invoke_optional_ret<F, U...>, invoke_result<F, U...>>::type;
|
||||
|
||||
template <class F, class U>
|
||||
using <a href='doc_optional.md#optional.hpp'>get_map_return</a> = <a href='doc_optional.md#tl::optional-T-'>optional<fixup_void<get_invoke_ret<F, U>>></a>;
|
||||
|
||||
template <class F, class ... U>
|
||||
using <a href='doc_optional.md#optional.hpp'>returns_void</a> = <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::is_void%3cget_invoke_ret%3cF,U...%3e%3e'>std::is_void<get_invoke_ret<F, U...>></a>;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>disable_if_optional</a> = <a href='doc_optional.md#optional.hpp'>enable_if_t<!is_optional<T>::value></a>;
|
||||
|
||||
template <class T>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_if_optional</a> = <a href='doc_optional.md#optional.hpp'>enable_if_t<is_optional<T>::value></a>;
|
||||
|
||||
template <class T, class ... U>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_if_ret_void</a> = <a href='doc_optional.md#optional.hpp'>enable_if_t<returns_void<T&&, U...>::value></a>;
|
||||
|
||||
template <class T, class ... U>
|
||||
using <a href='doc_optional.md#optional.hpp'>disable_if_ret_void</a> = <a href='doc_optional.md#optional.hpp'>enable_if_t<!returns_void<T&&, U...>::value></a>;
|
||||
}
|
||||
|
||||
struct <a href='doc_optional.md#optional.hpp'>in_place_t</a>;
|
||||
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>in_place_t{}</a> <a href='doc_optional.md#optional.hpp'>in_place</a>;
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>detail</a>
|
||||
{
|
||||
template <class T, class U>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_forward_value</a> = <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, U&&>::value&&!std::is_same<detail::decay_t<U>, in_place_t>::value&&!std::is_same<optional<T>, detail::decay_t<U>>::value></a>;
|
||||
|
||||
template <class T, class U, class Other>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_from_other</a> = <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, Other>::value&&!std::is_constructible<T, optional<U>&>::value&&!std::is_constructible<T, optional<U>&&>::value&&!std::is_constructible<T, const optional<U>&>::value&&!std::is_constructible<T, const optional<U>&&>::value&&!std::is_convertible<optional<U>&, T>::value&&!std::is_convertible<optional<U>&&, T>::value&&!std::is_convertible<const optional<U>&, T>::value&&!std::is_convertible<const optional<U>&&, T>::value></a>;
|
||||
|
||||
template <class T, class U>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_assign_forward</a> = <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<!std::is_same<optional<T>, detail::decay_t<U>>::value&&!detail::conjunction<std::is_scalar<T>, std::is_same<T, detail::decay_t<U>>>::value&&std::is_constructible<T, U>::value&&std::is_assignable<T&, U>::value></a>;
|
||||
|
||||
template <class T, class U, class Other>
|
||||
using <a href='doc_optional.md#optional.hpp'>enable_assign_from_other</a> = <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, Other>::value&&std::is_assignable<T&, Other>::value&&!std::is_constructible<T, optional<U>&>::value&&!std::is_constructible<T, optional<U>&&>::value&&!std::is_constructible<T, const optional<U>&>::value&&!std::is_constructible<T, const optional<U>&&>::value&&!std::is_convertible<optional<U>&, T>::value&&!std::is_convertible<optional<U>&&, T>::value&&!std::is_convertible<const optional<U>&, T>::value&&!std::is_convertible<const optional<U>&&, T>::value&&!std::is_assignable<T&, optional<U>&>::value&&!std::is_assignable<T&, optional<U>&&>::value&&!std::is_assignable<T&, const optional<U>&>::value&&!std::is_assignable<T&, const optional<U>&&>::value></a>;
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>swap_adl_tests</a>
|
||||
{
|
||||
struct <a href='doc_optional.md#optional.hpp'>tag</a>;
|
||||
|
||||
template <class T>
|
||||
<a href='doc_optional.md#optional.hpp'>tag</a> <a href='doc_optional.md#optional.hpp'>swap</a>(T&, T&);
|
||||
|
||||
template <class T, <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> N>
|
||||
<a href='doc_optional.md#optional.hpp'>tag</a> <a href='doc_optional.md#optional.hpp'>swap</a>(T(&)[N] a, T(&)[N] b);
|
||||
|
||||
template <class, class>
|
||||
<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::false_type'>std::false_type</a> <a href='doc_optional.md#optional.hpp'>can_swap</a>(...) noexcept(false);
|
||||
|
||||
template <class T, class U, class = decltype(swap(std::declval<T&>(), std::declval<U&>()))>
|
||||
)>std::true_type <a href='doc_optional.md#optional.hpp'>can_swap</a>(int) noexcept(noexcept(swap(std::declval<T&>(), std::declval<U&>())));
|
||||
|
||||
template <class, class>
|
||||
<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::false_type'>std::false_type</a> <a href='doc_optional.md#optional.hpp'>uses_std</a>(...);
|
||||
|
||||
template <class T, class U>
|
||||
<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::is_same%3cdecltype(swap(std::declval%3cT&%3e(),std::declval%3cU&%3e())),tag%3e'>std::is_same<decltype(swap(std::declval<T&>(), std::declval<U&>())), tag></a> <a href='doc_optional.md#optional.hpp'>uses_std</a>(int);
|
||||
|
||||
template <class T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_std_swap_noexcept</a>;
|
||||
|
||||
template <class T, <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> N>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_std_swap_noexcept<T[N]></a>;
|
||||
|
||||
template <class T, class U>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_adl_swap_noexcept</a>;
|
||||
}
|
||||
|
||||
template <class T, class U = T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_swappable</a>;
|
||||
|
||||
template <class T, <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::size_t'>std::size_t</a> N>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_swappable<T[N], T[N]></a>;
|
||||
|
||||
template <class T, class U = T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>is_nothrow_swappable</a>;
|
||||
}
|
||||
|
||||
struct <a href='doc_optional.md#optional.hpp'>nullopt_t</a>;
|
||||
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>nullopt_t{nullopt_t::do_not_use{}, nullopt_t::do_not_use{}}</a> <a href='doc_optional.md#optional.hpp'>nullopt</a>;
|
||||
|
||||
class <a href='doc_optional.md#optional.hpp'>bad_optional_access</a>;
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator></a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator>=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator==</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator!=</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>&, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<=</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>&) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator></a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator></a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>&) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator>=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>&, <a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
template <class T>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator>=</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs) noexcept;
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator==</a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator!=</a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<</a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator<=</a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator></a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator></a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator>=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, const U& rhs);
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool <a href='doc_optional.md#optional.hpp'>operator>=</a>(const U& lhs, const <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs);
|
||||
|
||||
template <class T, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_move_constructible<T>::value>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<detail::is_swappable<T>::value>*=nullptr</a>>
|
||||
void <a href='doc_optional.md#optional.hpp'>swap</a>(<a href='doc_optional.md#tl::optional-T-'>optional<T></a>& lhs, <a href='doc_optional.md#tl::optional-T-'>optional<T></a>& rhs) noexcept(noexcept(lhs.swap(rhs)));
|
||||
|
||||
template <class T>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<detail::decay_t<T>></a> <a href='doc_optional.md#optional.hpp'>make_optional</a>(T&& v);
|
||||
|
||||
template <class T, class ... Args>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#optional.hpp'>make_optional</a>(Args&&... args);
|
||||
|
||||
template <class T, class U, class ... Args>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#optional.hpp'>make_optional</a>(<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::initializer_list%3cU%3e'>std::initializer_list<U></a> il, Args&&... args);
|
||||
}
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>std</a>
|
||||
{
|
||||
}
|
||||
|
||||
namespace <a href='doc_optional.md#optional.hpp'>tl</a>
|
||||
{
|
||||
namespace <a href='doc_optional.md#optional.hpp'>detail</a>
|
||||
{
|
||||
template <class T, bool=::std::is_trivially_destructible<T>::value>
|
||||
struct <a href='doc_optional.md#optional.hpp'>optional_storage_base</a>;
|
||||
|
||||
template <class T>
|
||||
struct <a href='doc_optional.md#optional.hpp'>optional_storage_base<T, true></a>;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
class <a href='doc_optional.md#tl::optional-T-'>optional</a>;
|
||||
}</code></pre>
|
||||
|
||||
-----
|
||||
|
||||
-----
|
||||
|
||||
## Class template `tl::optional`<a id="tl::optional-T-"></a>
|
||||
|
||||
<pre><code class="language-cpp">template <class T>
|
||||
class optional
|
||||
{
|
||||
public:
|
||||
using <a href='doc_optional.md#tl::optional-T-'>value_type</a> = T;
|
||||
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>() noexcept = default;
|
||||
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>& rhs);
|
||||
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&& rhs) noexcept(std::is_nothrow_move_constructible<T>::value);
|
||||
|
||||
template <class ... Args>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, Args...>::value, in_place_t></a>, Args&&... args);
|
||||
|
||||
template <class U, class ... Args>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, std::initializer_list<U>&, Args&&...>::value, in_place_t></a>, <a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::initializer_list%3cU%3e'>std::initializer_list<U></a> il, Args&&... args);
|
||||
|
||||
template <class U = T, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_convertible<U&&, T>::value>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_forward_value<T, U>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(U&& u);
|
||||
|
||||
template <class U = T, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<!std::is_convertible<U&&, T>::value>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_forward_value<T, U>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a>(U&& u);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_from_other<T, U, const U&>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_convertible<const U&, T>::value>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_from_other<T, U, const U&>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<!std::is_convertible<const U&, T>::value>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_from_other<T, U, U&&>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_convertible<U&&, T>::value>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#tl::optional-T-'>optional<U></a>&& rhs);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_from_other<T, U, U&&>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_t<!std::is_convertible<U&&, T>::value>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>(<a href='doc_optional.md#tl::optional-T-'>optional<U></a>&& rhs);
|
||||
|
||||
<a href='doc_optional.md#tl::optional-T-'>~optional</a>() = default;
|
||||
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(<a href='doc_optional.md#optional.hpp'>nullopt_t</a>) noexcept;
|
||||
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>& rhs);
|
||||
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&& rhs) noexcept(std::is_nothrow_move_assignable<T>::value&&std::is_nothrow_move_constructible<T>::value);
|
||||
|
||||
template <class U = T, <a href='doc_optional.md#optional.hpp'>detail::enable_assign_forward<T, U>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(U&& u);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_assign_from_other<T, U, const U&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional<U></a>& rhs);
|
||||
|
||||
template <class U, <a href='doc_optional.md#optional.hpp'>detail::enable_assign_from_other<T, U, U>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional</a>& <a href='doc_optional.md#tl::optional-T-'>operator=</a>(<a href='doc_optional.md#tl::optional-T-'>optional<U></a>&& rhs);
|
||||
|
||||
template <class ... Args>
|
||||
T& <a href='doc_optional.md#tl::optional-T-'>emplace</a>(Args&&... args);
|
||||
|
||||
template <class U, class ... Args>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::enable_if_t<std::is_constructible<T, std::initializer_list<U>&, Args&&...>::value, T&></a> <a href='doc_optional.md#tl::optional-T-'>emplace</a>(<a href='http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search=std::initializer_list%3cU%3e'>std::initializer_list<U></a> il, Args&&... args);
|
||||
|
||||
void <a href='doc_optional.md#tl::optional-T-'>swap</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>& rhs) noexcept(std::is_nothrow_move_constructible<T>::value&&detail::is_nothrow_swappable<T>::value);
|
||||
|
||||
constexpr const T* <a href='doc_optional.md#tl::optional-T-'>operator-></a>() const;
|
||||
|
||||
constexpr T* <a href='doc_optional.md#tl::optional-T-'>operator-></a>();
|
||||
|
||||
constexpr const T& <a href='doc_optional.md#tl::optional-T-'>operator*</a>() const &;
|
||||
|
||||
constexpr T& <a href='doc_optional.md#tl::optional-T-'>operator*</a>() &;
|
||||
|
||||
constexpr T&& <a href='doc_optional.md#tl::optional-T-'>operator*</a>() &&;
|
||||
|
||||
constexpr const T&& <a href='doc_optional.md#tl::optional-T-'>operator*</a>() const &&;
|
||||
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>operator bool</a>() const noexcept;
|
||||
|
||||
constexpr bool <a href='doc_optional.md#tl::optional-T-'>has_value</a>() const noexcept;
|
||||
|
||||
constexpr const T& <a href='doc_optional.md#tl::optional-T-'>value</a>() const &;
|
||||
|
||||
constexpr T& <a href='doc_optional.md#tl::optional-T-'>value</a>() &;
|
||||
|
||||
constexpr T&& <a href='doc_optional.md#tl::optional-T-'>value</a>() &&;
|
||||
|
||||
constexpr const T&& <a href='doc_optional.md#tl::optional-T-'>value</a>() const &&;
|
||||
|
||||
template <class U>
|
||||
constexpr T <a href='doc_optional.md#tl::optional-T-'>value_or</a>(U&& u) const &;
|
||||
|
||||
template <class U>
|
||||
constexpr T <a href='doc_optional.md#tl::optional-T-'>value_or</a>(U&& u) &&;
|
||||
|
||||
void <a href='doc_optional.md#tl::optional-T-'>reset</a>() noexcept;
|
||||
|
||||
template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> <a href='doc_optional.md#tl::optional-T-::and_then(F&&)&'>and_then</a>(F&& f) &;
|
||||
template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> <a href='doc_optional.md#tl::optional-T-::and_then(F&&)&'>and_then</a>(F&& f) const &;
|
||||
|
||||
template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> <a href='doc_optional.md#tl::optional-T-::and_then(F&&)&&'>and_then</a>(F&& f) &&;
|
||||
template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> <a href='doc_optional.md#tl::optional-T-::and_then(F&&)&&'>and_then</a>(F&& f) const &&;
|
||||
|
||||
template <class F> auto map(F &&f) &;
|
||||
template <class F> auto map(F &&f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F, T&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) &;
|
||||
|
||||
template <class F> auto map(F &&f) &;
|
||||
template <class F> auto map(F &&f) const &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T&&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F, T&&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T&&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T const&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T const&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F, T const&>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T const&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T const&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T const&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&'>map</a>(F&& f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T const&&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T const&&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) const &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F, T const&&>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T const&&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) const &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::enable_if_optional<F>*=nullptr</a>, <a href='doc_optional.md#optional.hpp'>detail::enable_if_ret_void<F, T const&&>*=nullptr</a>>
|
||||
<a href='doc_optional.md#optional.hpp'>detail::get_map_return<F, T&></a> <a href='doc_optional.md#tl::optional-T-::map(F&&)&&'>map</a>(F&& f) const &&;
|
||||
|
||||
template <class F> optional<T> or_else (F &&f) &;
|
||||
template <class F> optional<T> or_else (F &&f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#tl::optional-T-::or_else(F&&)&'>or_else</a>(F&& f) &;
|
||||
|
||||
template <class F> optional<T> or_else (F &&f) &&;
|
||||
template <class F> optional<T> or_else (F &&f) const &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#tl::optional-T-::or_else(F&&)&&'>or_else</a>(F&& f) &&;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F>*=nullptr</a>>
|
||||
constexpr <a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#tl::optional-T-::or_else(F&&)&'>or_else</a>(F&& f) const &;
|
||||
|
||||
template <class F, <a href='doc_optional.md#optional.hpp'>detail::disable_if_ret_void<F>*=nullptr</a>>
|
||||
<a href='doc_optional.md#tl::optional-T-'>optional<T></a> <a href='doc_optional.md#tl::optional-T-::or_else(F&&)&&'>or_else</a>(F&& f) const &&;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or</a>(F&& f, U&& u) &;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or</a>(F&& f, U&& u) &&;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or</a>(F&& f, U&& u) const &;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or</a>(F&& f, U&& u) const &&;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or_else</a>(F&& f, U&& u) &;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or_else</a>(F&& f, U&& u) &&;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or_else</a>(F&& f, U&& u) const &;
|
||||
|
||||
template <class F, class U>
|
||||
U <a href='doc_optional.md#tl::optional-T-'>map_or_else</a>(F&& f, U&& u) const &&;
|
||||
};</code></pre>
|
||||
|
||||
An optional object is an object that contains the storage for another object and manages the lifetime of this contained object, if any. The contained object may be initialized after the optional object has been initialized, and may be destroyed before the optional object has been destroyed. The initialization state of the contained object is tracked by the optional object.
|
||||
|
||||
### Function template `tl::optional::and_then`<a id="tl::optional-T-::and_then(F&&)&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> and_then(F&& f) &;
|
||||
|
||||
(2) template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> and_then(F&& f) const &;</code></pre>
|
||||
|
||||
Carries out some operation which returns an optional on the stored object if there is one.
|
||||
|
||||
*Requires*: `std::invoke(std::forward<F>(f), value())` returns a `std::optional<U>` for some `U`.
|
||||
|
||||
*Returns*: Let `U` be the result of `std::invoke(std::forward<F>(f), value())`. Returns a `std::optional<U>`. The return value is empty if `*this` is empty, otherwise the return value of `std::invoke(std::forward<F>(f), value())` is returned.
|
||||
|
||||
### Function template `tl::optional::and_then`<a id="tl::optional-T-::and_then(F&&)&&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> and_then(F&& f) &&;
|
||||
|
||||
(2) template <class F>
|
||||
constexpr <a href='doc_optional.md#optional.hpp'>detail::invoke_result_t<F, T></a> and_then(F&& f) const &&;</code></pre>
|
||||
|
||||
Carries out some operation which returns an optional on the stored object if there is one.
|
||||
|
||||
*Requires*: `std::invoke(std::forward<F>(f), std::move(value()))` returns a `std::optional<U>` for some `U`.
|
||||
|
||||
*Returns*: Let `U` be the result of `std::invoke(std::forward<F>(f), std::move(value()))`. Returns a `std::optional<U>`. The return value is empty if `*this` is empty, otherwise the return value of `std::invoke(std::forward<F>(f), std::move(value()))` is returned.
|
||||
|
||||
### Function template `tl::optional::map`<a id="tl::optional-T-::map(F&&)&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F> auto map(F &&f) &;
|
||||
|
||||
(2) template <class F> auto map(F &&f) const &;</code></pre>
|
||||
|
||||
Carries out some operation on the stored object if there is one.
|
||||
|
||||
*Returns*: Let `U` be the result of `std::invoke(std::forward<F>(f), value())`. Returns a `std::optional<U>`. The return value is empty if `*this` is empty, otherwise an `optional<U>` is constructed from the return value of `std::invoke(std::forward<F>(f), value())` and is returned.
|
||||
|
||||
### Function template `tl::optional::map`<a id="tl::optional-T-::map(F&&)&&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F> auto map(F &&f) &;
|
||||
|
||||
(2) template <class F> auto map(F &&f) const &&;</code></pre>
|
||||
|
||||
Carries out some operation on the stored object if there is one.
|
||||
|
||||
*Returns*: Let `U` be the result of `std::invoke(std::forward<F>(f), std::move(value()))`. Returns a `std::optional<U>`. The return value is empty if `*this` is empty, otherwise an `optional<U>` is constructed from the return value of `std::invoke(std::forward<F>(f), std::move(value()))` and is returned.
|
||||
|
||||
### Function template `tl::optional::or_else`<a id="tl::optional-T-::or_else(F&&)&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F> optional<T> or_else (F &&f) &;
|
||||
|
||||
(2) template <class F> optional<T> or_else (F &&f) const &;</code></pre>
|
||||
|
||||
Calls `f` if the optional is empty
|
||||
|
||||
*Requires*: `std::invoke_result_t<F>` must be void or convertible to `optional<T>`.
|
||||
|
||||
*Effects*: If `*this` has a value, returns `*this`. Otherwise, if `f` returns `void`, calls `std::forward<F>(f)` and returns `std::nullopt`. Otherwise, returns `std::forward<F>(f)()`.
|
||||
|
||||
### Function template `tl::optional::or_else`<a id="tl::optional-T-::or_else(F&&)&&"></a>
|
||||
|
||||
<pre><code class="language-cpp">(1) template <class F> optional<T> or_else (F &&f) &&;
|
||||
|
||||
(2) template <class F> optional<T> or_else (F &&f) const &&;</code></pre>
|
||||
|
||||
Calls `f` if the optional is empty
|
||||
|
||||
*Requires*: `std::invoke_result_t<F>` must be void or convertible to `optional<T>`.
|
||||
|
||||
*Effects*: If `*this` has a value, returns `std::move(*this)`. Otherwise, if `f` returns `void`, calls `std::forward<F>(f)` and returns `std::nullopt`. Otherwise, returns `std::forward<F>(f)()`.
|
||||
|
||||
-----
|
||||
|
||||
-----
|
Reference in New Issue
Block a user