Update docs

This commit is contained in:
Simon Brand
2017-11-27 15:12:44 +00:00
parent 26c00afe27
commit 5a3f094ec7

View File

@@ -1,113 +1,117 @@
# Header file `optional.hpp`<a id="optional.hpp"></a> # Header file `optional.hpp`<a id="optional.hpp"></a>
<pre><code class="language-cpp">#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_HPP</a> <pre><code class="language-cpp">#define <a href='doc_optional.html#optional.hpp'>TL_OPTIONAL_HPP</a>
#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_VERSION_MAJOR</a> #define <a href='doc_optional.html#optional.hpp'>TL_OPTIONAL_VERSION_MAJOR</a>
#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_VERSION_MINOR</a> #define <a href='doc_optional.html#optional.hpp'>TL_OPTIONAL_VERSION_MINOR</a>
#define <a href='doc_optional.md#optional.hpp'>IS_TRIVIALLY_COPY_CONSTRUCTIBLE</a>(T) #define <a href='doc_optional.html#optional.hpp'>IS_TRIVIALLY_COPY_CONSTRUCTIBLE</a>(T)
#define <a href='doc_optional.md#optional.hpp'>IS_TRIVIALLY_COPY_ASSIGNABLE</a>(T) #define <a href='doc_optional.html#optional.hpp'>IS_TRIVIALLY_COPY_ASSIGNABLE</a>(T)
#define <a href='doc_optional.md#optional.hpp'>IS_TRIVIALLY_DESTRUCTIBLE</a>(T) #define <a href='doc_optional.html#optional.hpp'>IS_TRIVIALLY_DESTRUCTIBLE</a>(T)
#define <a href='doc_optional.md#optional.hpp'>TL_OPTIONAL_CXX14</a> #define <a href='doc_optional.html#optional.hpp'>TL_OPTIONAL_CXX14</a>
namespace <a href='doc_optional.md#optional.hpp'>tl</a> #define <a href='doc_optional.html#optional.hpp'>TL_MONOSTATE_INPLACE_MUTEX</a>
#define <a href='doc_optional.html#optional.hpp'>TL_TRAITS_MUTEX</a>
namespace <a href='doc_optional.html#optional.hpp'>tl</a>
{ {
class <a href='doc_optional.md#tl::monostate'>monostate</a>; class <a href='doc_optional.html#tl::monostate'>monostate</a>;
struct <a href='doc_optional.md#tl::in_place_t'>in_place_t</a>; struct <a href='doc_optional.html#tl::in_place_t'>in_place_t</a>;
constexpr <a href='doc_optional.md#tl::in_place_t'>in_place_t{}</a> <a href='doc_optional.md#tl::in_place'>in_place</a>; constexpr <a href='doc_optional.html#tl::in_place_t'>in_place_t{}</a> <a href='doc_optional.html#tl::in_place'>in_place</a>;
struct <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>; struct <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>;
static constexpr nullopt_t nullopt; static constexpr nullopt_t nullopt;
class <a href='doc_optional.md#optional.hpp'>bad_optional_access</a>; class <a href='doc_optional.html#optional.hpp'>bad_optional_access</a>;
template &lt;class T&gt; template &lt;class T&gt;
class <a href='doc_optional.md#tl::optional-T-'>optional</a>; class <a href='doc_optional.html#tl::optional-T-'>optional</a>;
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator==</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator!=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&lt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&lt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&gt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&gt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&lt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&lt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&gt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constoptional-U-&)'>operator&gt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator==</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator==</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator==</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator!=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator!=</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator!=</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;=</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&lt;=</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
template &lt;class T&gt; template &lt;class T&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;=</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,tl::nullopt_t)'>operator&gt;=</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator==</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator==</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator==</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator==</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator!=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator!=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator!=</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator!=</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&lt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&lt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&lt;</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&lt;</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&lt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&lt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&lt;=</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&lt;=</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&gt;</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&gt;</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&gt;</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&gt;</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&gt;=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&gt;=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
template &lt;class T, class U&gt; template &lt;class T, class U&gt;
constexpr bool <a href='doc_optional.md#tl::operator==(constoptional-T-&,constU&)'>operator&gt;=</a>(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool <a href='doc_optional.html#tl::operator==(constoptional-T-&,constU&)'>operator&gt;=</a>(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
template &lt;class T&gt; template &lt;class T&gt;
void swap(optional&lt;T&gt; &amp;lhs, optional&lt;T&gt; &amp;rhs); void swap(optional&lt;T&gt; &amp;lhs, optional&lt;T&gt;
template &lt;class T&gt; template &lt;class T&gt;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional&lt;detail::decay_t&lt;T&gt;&gt;</a> <a href='doc_optional.md#optional.hpp'>make_optional</a>(T&amp;&amp; v); constexpr <a href='doc_optional.html#tl::optional-T-'>optional&lt;detail::decay_t&lt;T&gt;&gt;</a> <a href='doc_optional.html#optional.hpp'>make_optional</a>(T&amp;&amp; v);
template &lt;class T, class ... Args&gt; template &lt;class T, class ... Args&gt;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a> <a href='doc_optional.md#optional.hpp'>make_optional</a>(Args&amp;&amp;... args); constexpr <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a> <a href='doc_optional.html#optional.hpp'>make_optional</a>(Args&amp;&amp;... args);
template &lt;class T, class U, class ... Args&gt; template &lt;class T, class U, class ... Args&gt;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</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&lt;U&gt;</a> il, Args&amp;&amp;... args); constexpr <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a> <a href='doc_optional.html#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&lt;U&gt;</a> il, Args&amp;&amp;... args);
} }
namespace <a href='doc_optional.md#optional.hpp'>std</a> namespace <a href='doc_optional.html#optional.hpp'>std</a>
{ {
}</code></pre> }</code></pre>
@@ -123,14 +127,14 @@ Used to represent an optional with no data; essentially a bool
<pre><code class="language-cpp">struct in_place_t <pre><code class="language-cpp">struct in_place_t
{ {
<a href='doc_optional.md#tl::in_place_t'>in_place_t</a>() = default; <a href='doc_optional.html#tl::in_place_t'>in_place_t</a>() = default;
};</code></pre> };</code></pre>
A tag type to tell optional to construct its value in-place A tag type to tell optional to construct its value in-place
## Variable `tl::in_place`<a id="tl::in_place"></a> ## Variable `tl::in_place`<a id="tl::in_place"></a>
<pre><code class="language-cpp">constexpr <a href='doc_optional.md#tl::in_place_t'>in_place_t{}</a> in_place;</code></pre> <pre><code class="language-cpp">constexpr <a href='doc_optional.html#tl::in_place_t'>in_place_t{}</a> in_place;</code></pre>
A tag to tell optional to construct its value in-place A tag to tell optional to construct its value in-place
@@ -138,9 +142,9 @@ A tag to tell optional to construct its value in-place
<pre><code class="language-cpp">struct nullopt_t <pre><code class="language-cpp">struct nullopt_t
{ {
struct <a href='doc_optional.md#tl::nullopt_t'>do_not_use</a>; struct <a href='doc_optional.html#tl::nullopt_t'>do_not_use</a>;
constexpr <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>(<a href='doc_optional.md#tl::nullopt_t'>do_not_use</a>, <a href='doc_optional.md#tl::nullopt_t'>do_not_use</a>) noexcept; constexpr <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>(<a href='doc_optional.html#tl::nullopt_t'>do_not_use</a>, <a href='doc_optional.html#tl::nullopt_t'>do_not_use</a>) noexcept;
};</code></pre> };</code></pre>
A tag type to represent an empty optional A tag type to represent an empty optional
@@ -172,62 +176,62 @@ public:
template &lt;class F&gt; template &lt;class F&gt;
constexpr auto and_then(F &amp;&amp;f) const &amp;&amp;; constexpr auto and_then(F &amp;&amp;f) const &amp;&amp;;
template &lt;class F&gt; auto map(F &amp;&amp;f) &amp;; template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) &amp;;
template &lt;class F&gt; auto map(F &amp;&amp;f) &amp;&amp;; template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) &amp;&amp;;
template &lt;class F&gt; auto map(F &amp;&amp;f) const&amp;; template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) const&amp;;
template &lt;class F&gt; auto map(F &amp;&amp;f) const&amp;&amp;; template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) const&amp;&amp;;
template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) &amp;; template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) &amp;;
template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) &amp;&amp;; template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) &amp;&amp;;
template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) const &amp;; template &lt;class F&gt; optional&lt;T&gt; or_else (F &amp;&amp;f) const &amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
U <a href='doc_optional.md#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) &amp;; U <a href='doc_optional.html#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) &amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
U <a href='doc_optional.md#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) &amp;&amp;; U <a href='doc_optional.html#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) &amp;&amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
U <a href='doc_optional.md#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) const &amp;; U <a href='doc_optional.html#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) const &amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
U <a href='doc_optional.md#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) const &amp;&amp;; U <a href='doc_optional.html#tl::optional-T-::map_or(F&&,U&&)&'>map_or</a>(F&amp;&amp; f, U&amp;&amp; u) const &amp;&amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;;
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;&amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) const &amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)
template &lt;class F, class U&gt; template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) const &amp;&amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)
template &lt;class U&gt; template &lt;class U&gt;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional&lt;typename std::decay&lt;U&gt;::type&gt;</a> <a href='doc_optional.md#tl::optional-T-::conjunction(U&&)const'>conjunction</a>(U&amp;&amp; u) const; constexpr <a href='doc_optional.html#tl::optional-T-'>optional&lt;typename std::decay&lt;U&gt;::type&gt;</a> <a href='doc_optional.html#tl::optional-T-::conjunction(U&&)const'>conjunction</a>(U&amp;&amp; u) const;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) &amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) &amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) const &amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) const &amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) &amp;&amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) &amp;&amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) const &amp;&amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) const &amp;&amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;&amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;&amp;;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;&amp;; constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::disjunction(constoptional-T-&)&'>disjunction</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;&amp;;
<a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::take()&'>take</a>() &amp;; <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::take()&'>take</a>() &amp;;
<a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::take()&'>take</a>() const &amp;; <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::take()&'>take</a>() const &amp;;
<a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::take()&'>take</a>() &amp;&amp;; <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::take()&'>take</a>() &amp;&amp;;
<a href='doc_optional.md#tl::optional-T-'>optional</a> <a href='doc_optional.md#tl::optional-T-::take()&'>take</a>() const &amp;&amp;; <a href='doc_optional.html#tl::optional-T-'>optional</a> <a href='doc_optional.html#tl::optional-T-::take()&'>take</a>() const &amp;&amp;;
using <a href='doc_optional.md#tl::optional-T-'>value_type</a> = T; using <a href='doc_optional.html#tl::optional-T-'>value_type</a> = T;
constexpr <a href='doc_optional.md#tl::optional-T-::optional()'>optional</a>() noexcept = default; constexpr <a href='doc_optional.html#tl::optional-T-::optional()'>optional</a>() noexcept = default;
constexpr <a href='doc_optional.md#tl::optional-T-::optional()'>optional</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr <a href='doc_optional.html#tl::optional-T-::optional()'>optional</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
constexpr <a href='doc_optional.md#tl::optional-T-::optional(constoptional-T-&)'>optional</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) = default; constexpr <a href='doc_optional.html#tl::optional-T-::optional(constoptional-T-&)'>optional</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) = default;
constexpr <a href='doc_optional.md#tl::optional-T-::optional(optional-T-&&)'>optional</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default; constexpr <a href='doc_optional.html#tl::optional-T-::optional(optional-T-&&)'>optional</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;
template &lt;class... Args&gt; constexpr explicit optional(in_place_t, Args&amp;&amp;... args); template &lt;class... Args&gt; constexpr explicit
template &lt;class U, class... Args&gt; template &lt;class U, class... Args&gt;
constexpr explicit optional(in_place_t, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;... args); constexpr explicit
template &lt;class U=T&gt; constexpr optional(U &amp;&amp;u); template &lt;class U=T&gt; constexpr optional(U &amp;&amp;u);
@@ -235,13 +239,13 @@ public:
template &lt;class U&gt; optional(optional&lt;U&gt; &amp;&amp;rhs); template &lt;class U&gt; optional(optional&lt;U&gt; &amp;&amp;rhs);
<a href='doc_optional.md#tl::optional-T-::~optional()'>~optional</a>() = default; <a href='doc_optional.html#tl::optional-T-::~optional()'>~optional</a>() = default;
<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.md#tl::optional-T-::operator=(tl::nullopt_t)'>operator=</a>(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.html#tl::optional-T-::operator=(tl::nullopt_t)'>operator=</a>(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.md#tl::optional-T-::operator=(constoptional-T-&)'>operator=</a>(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) = default; <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.html#tl::optional-T-::operator=(constoptional-T-&)'>operator=</a>(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) = default;
<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.md#tl::optional-T-::operator=(optional-T-&&)'>operator=</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default; <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; <a href='doc_optional.html#tl::optional-T-::operator=(optional-T-&&)'>operator=</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;
optional &amp;operator=(U &amp;&amp;u); optional &amp;operator=(U &amp;&amp;u);
@@ -250,11 +254,12 @@ public:
optional &amp;operator=(optional&lt;U&gt; &amp;&amp; rhs); optional &amp;operator=(optional&lt;U&gt; &amp;&amp; rhs);
template &lt;class ... Args&gt; template &lt;class ... Args&gt;
T&amp; <a href='doc_optional.md#tl::optional-T-::emplace(Args&&...)'>emplace</a>(Args&amp;&amp;... args); T&amp; <a href='doc_optional.html#tl::optional-T-::emplace(Args&&...)'>emplace</a>(Args&amp;&amp;... args);
template &lt;class U, class... Args&gt;
T&amp; emplace(std::initializer_list&lt;U&gt; il, Args &amp;&amp;... args);
void <a href='doc_optional.md#tl::optional-T-::swap(optional-T-&)'>swap</a>(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) noexcept(std::is_nothrow_move_constructible&lt;T&gt;::value&amp;&amp;detail::is_nothrow_swappable&lt;T&gt;::value); template &lt;class U, class... Args&gt;
T&amp;
void <a href='doc_optional.html#tl::optional-T-::swap(optional-T-&)'>swap</a>(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) noexcept(std::is_nothrow_move_constructible&lt;T&gt;::value&amp;&amp;detail::is_nothrow_swappable&lt;T&gt;::value);
constexpr const T *operator-&gt;() const; constexpr const T *operator-&gt;() const;
constexpr T *operator-&gt;(); constexpr T *operator-&gt;();
@@ -262,18 +267,18 @@ public:
constexpr T &amp;operator*(); constexpr T &amp;operator*();
constexpr const T &amp;operator*() const; constexpr const T &amp;operator*() const;
constexpr bool <a href='doc_optional.md#tl::optional-T-::has_value()const'>has_value</a>() const noexcept; constexpr bool <a href='doc_optional.html#tl::optional-T-::has_value()const'>has_value</a>() const noexcept;
constexpr <a href='doc_optional.md#tl::optional-T-::has_value()const'>operator bool</a>() const noexcept; constexpr <a href='doc_optional.html#tl::optional-T-::has_value()const'>operator bool</a>() const noexcept;
constexpr T&amp; <a href='doc_optional.md#tl::optional-T-::value()&'>value</a>() &amp;; constexpr T&amp; <a href='doc_optional.html#tl::optional-T-::value()&'>value</a>() &amp;;
constexpr const T &amp;value() const; constexpr const T &amp;value() const;
template &lt;class U&gt; template &lt;class U&gt;
constexpr T <a href='doc_optional.md#tl::optional-T-::value_or(U&&)const&'>value_or</a>(U&amp;&amp; u) const &amp;; constexpr T <a href='doc_optional.html#tl::optional-T-::value_or(U&&)const&'>value_or</a>(U&amp;&amp; u) const &amp;;
template &lt;class U&gt; template &lt;class U&gt;
constexpr T <a href='doc_optional.md#tl::optional-T-::value_or(U&&)const&'>value_or</a>(U&amp;&amp; u) &amp;&amp;; constexpr T <a href='doc_optional.html#tl::optional-T-::value_or(U&&)const&'>value_or</a>(U&amp;&amp; u) &amp;&amp;;
void <a href='doc_optional.md#tl::optional-T-::reset()'>reset</a>() noexcept; void <a href='doc_optional.html#tl::optional-T-::reset()'>reset</a>() noexcept;
};</code></pre> };</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. 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.
@@ -292,19 +297,17 @@ An optional object is an object that contains the storage for another object and
(4) template &lt;class F&gt; (4) template &lt;class F&gt;
constexpr auto and_then(F &amp;&amp;f) const &amp;&amp;;</code></pre> constexpr auto and_then(F &amp;&amp;f) const &amp;&amp;;</code></pre>
Carries out some operation which returns an optional on the stored object if there is one. 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.
*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::map`<a id="tl::optional-T-::map(F&&)&"></a> ### Function template `tl::optional::map`<a id="tl::optional-T-::map(F&&)&"></a>
<pre><code class="language-cpp">(1) template &lt;class F&gt; auto map(F &amp;&amp;f) &amp;; <pre><code class="language-cpp">(1) template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) &amp;;
(2) template &lt;class F&gt; auto map(F &amp;&amp;f) &amp;&amp;; (2) template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) &amp;&amp;;
(3) template &lt;class F&gt; auto map(F &amp;&amp;f) const&amp;; (3) template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) const&amp;;
(4) template &lt;class F&gt; auto map(F &amp;&amp;f) const&amp;&amp;;</code></pre> (4) template &lt;class F&gt; constexpr auto map(F &amp;&amp;f) const&amp;&amp;;</code></pre>
Carries out some operation on the stored object if there is one. Carries out some operation on the stored object if there is one.
@@ -346,13 +349,13 @@ If there is a value stored, then `f` is called with `**this` and the value is re
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;;
(2) template &lt;class F, class U&gt; (2) template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) &amp;&amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)
(3) template &lt;class F, class U&gt; (3) template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) const &amp;; auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)
(4) template &lt;class F, class U&gt; (4) template &lt;class F, class U&gt;
auto map_or_else(F &amp;&amp;f, U &amp;&amp;u) const &amp;&amp;;</code></pre> auto map_or_else(F &amp;&amp;f, U &amp;&amp;u)</code></pre>
Maps the stored value with `f` if there is one, otherwise calls `u` and returns the result. Maps the stored value with `f` if there is one, otherwise calls `u` and returns the result.
@@ -361,39 +364,39 @@ If there is a value stored, then `f` is called with `**this` and the value is re
### Function template `tl::optional::conjunction`<a id="tl::optional-T-::conjunction(U&&)const"></a> ### Function template `tl::optional::conjunction`<a id="tl::optional-T-::conjunction(U&&)const"></a>
<pre><code class="language-cpp">template &lt;class U&gt; <pre><code class="language-cpp">template &lt;class U&gt;
constexpr <a href='doc_optional.md#tl::optional-T-'>optional&lt;typename std::decay&lt;U&gt;::type&gt;</a> conjunction(U&amp;&amp; u) const;</code></pre> constexpr <a href='doc_optional.html#tl::optional-T-'>optional&lt;typename std::decay&lt;U&gt;::type&gt;</a> conjunction(U&amp;&amp; u) const;</code></pre>
*Returns*: `u` if `*this` has a value, otherwise an empty optional. *Returns*: `u` if `*this` has a value, otherwise an empty optional.
### Function `tl::optional::disjunction`<a id="tl::optional-T-::disjunction(constoptional-T-&)&"></a> ### Function `tl::optional::disjunction`<a id="tl::optional-T-::disjunction(constoptional-T-&)&"></a>
<pre><code class="language-cpp">(1) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) &amp;; <pre><code class="language-cpp">(1) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) &amp;;
(2) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) const &amp;; (2) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) const &amp;;
(3) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) &amp;&amp;; (3) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) &amp;&amp;;
(4) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) const &amp;&amp;; (4) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) const &amp;&amp;;
(5) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;; (5) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;;
(6) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;; (6) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;;
(7) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;&amp;; (7) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) &amp;&amp;;
(8) constexpr <a href='doc_optional.md#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;&amp;;</code></pre> (8) constexpr <a href='doc_optional.html#tl::optional-T-'>optional</a> disjunction(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) const &amp;&amp;;</code></pre>
*Returns*: `rhs` if `*this` is empty, otherwise the current value. *Returns*: `rhs` if `*this` is empty, otherwise the current value.
### Function `tl::optional::take`<a id="tl::optional-T-::take()&"></a> ### Function `tl::optional::take`<a id="tl::optional-T-::take()&"></a>
<pre><code class="language-cpp">(1) <a href='doc_optional.md#tl::optional-T-'>optional</a> take() &amp;; <pre><code class="language-cpp">(1) <a href='doc_optional.html#tl::optional-T-'>optional</a> take() &amp;;
(2) <a href='doc_optional.md#tl::optional-T-'>optional</a> take() const &amp;; (2) <a href='doc_optional.html#tl::optional-T-'>optional</a> take() const &amp;;
(3) <a href='doc_optional.md#tl::optional-T-'>optional</a> take() &amp;&amp;; (3) <a href='doc_optional.html#tl::optional-T-'>optional</a> take() &amp;&amp;;
(4) <a href='doc_optional.md#tl::optional-T-'>optional</a> take() const &amp;&amp;;</code></pre> (4) <a href='doc_optional.html#tl::optional-T-'>optional</a> take() const &amp;&amp;;</code></pre>
Takes the value out of the optional, leaving it empty Takes the value out of the optional, leaving it empty
@@ -401,13 +404,13 @@ Takes the value out of the optional, leaving it empty
<pre><code class="language-cpp">(1) constexpr optional() noexcept = default; <pre><code class="language-cpp">(1) constexpr optional() noexcept = default;
(2) constexpr optional(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept;</code></pre> (2) constexpr optional(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;</code></pre>
Constructs an optional that does not contain a value. Constructs an optional that does not contain a value.
### Constructor `tl::optional::optional`<a id="tl::optional-T-::optional(constoptional-T-&)"></a> ### Constructor `tl::optional::optional`<a id="tl::optional-T-::optional(constoptional-T-&)"></a>
<pre><code class="language-cpp">constexpr optional(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) = default;</code></pre> <pre><code class="language-cpp">constexpr optional(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) = default;</code></pre>
Copy constructor Copy constructor
@@ -415,7 +418,7 @@ If `rhs` contains a value, the stored value is direct-initialized with it. Other
### Constructor `tl::optional::optional`<a id="tl::optional-T-::optional(optional-T-&&)"></a> ### Constructor `tl::optional::optional`<a id="tl::optional-T-::optional(optional-T-&&)"></a>
<pre><code class="language-cpp">constexpr optional(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;</code></pre> <pre><code class="language-cpp">constexpr optional(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;</code></pre>
Move constructor Move constructor
@@ -423,13 +426,15 @@ If `rhs` contains a value, the stored value is direct-initialized with it. Other
### Function template `tl::optional::optional`<a id="tl::optional-T-::optional(detail::enable_if_t-std::is_constructible-T,Args...-::value,in_place_t-,Args&&...)"></a> ### Function template `tl::optional::optional`<a id="tl::optional-T-::optional(detail::enable_if_t-std::is_constructible-T,Args...-::value,in_place_t-,Args&&...)"></a>
<pre><code class="language-cpp">(1) template &lt;class... Args&gt; constexpr explicit optional(in_place_t, Args&amp;&amp;... args); <pre><code class="language-cpp">(1) template &lt;class... Args&gt; constexpr explicit
(2) template &lt;class U, class... Args&gt; (2) template &lt;class U, class... Args&gt;
constexpr explicit optional(in_place_t, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;... args);</code></pre> constexpr explicit</code></pre>
Constructs the stored value in-place using the given arguments. Constructs the stored value in-place using the given arguments.
optional(in\_place\_t, Args&&... args);
### Function template `tl::optional::optional`<a id="tl::optional-T-::optional(U&&)"></a> ### Function template `tl::optional::optional`<a id="tl::optional-T-::optional(U&&)"></a>
<pre><code class="language-cpp">template &lt;class U=T&gt; constexpr optional(U &amp;&amp;u);</code></pre> <pre><code class="language-cpp">template &lt;class U=T&gt; constexpr optional(U &amp;&amp;u);</code></pre>
@@ -456,7 +461,7 @@ Destroys the stored value if there is one.
### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(tl::nullopt_t)"></a> ### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(tl::nullopt_t)"></a>
<pre><code class="language-cpp"><a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; operator=(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept;</code></pre> <pre><code class="language-cpp"><a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; operator=(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;</code></pre>
Assignment to empty. Assignment to empty.
@@ -464,7 +469,7 @@ Destroys the current value if there is one.
### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(constoptional-T-&)"></a> ### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(constoptional-T-&)"></a>
<pre><code class="language-cpp"><a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; operator=(const <a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) = default;</code></pre> <pre><code class="language-cpp"><a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; operator=(const <a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) = default;</code></pre>
Copy assignment. Copy assignment.
@@ -472,7 +477,7 @@ Copies the value from `rhs` if there is one. Otherwise resets the stored value i
### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(optional-T-&&)"></a> ### Assignment operator `tl::optional::operator=`<a id="tl::optional-T-::operator=(optional-T-&&)"></a>
<pre><code class="language-cpp"><a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; operator=(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;</code></pre> <pre><code class="language-cpp"><a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; operator=(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp;&amp; rhs) = default;</code></pre>
Move assignment. Move assignment.
@@ -502,17 +507,21 @@ Moves the value from `rhs` if there is one. Otherwise resets the stored value in
### Function template `tl::optional::emplace`<a id="tl::optional-T-::emplace(Args&&...)"></a> ### Function template `tl::optional::emplace`<a id="tl::optional-T-::emplace(Args&&...)"></a>
<pre><code class="language-cpp">(1) template &lt;class ... Args&gt; <pre><code class="language-cpp">template &lt;class ... Args&gt;
T&amp; emplace(Args&amp;&amp;... args); T&amp; emplace(Args&amp;&amp;... args);</code></pre>
(2) template &lt;class U, class... Args&gt; Constructs the value in-place, destroying the current one if there is one. \\group emplace
T&amp; emplace(std::initializer_list&lt;U&gt; il, Args &amp;&amp;... args);</code></pre>
Constructs the value in-place, destroying the current one if there is one. ### Function template `tl::optional::emplace`<a id="tl::optional-T-::emplace(std::initializer_list-U-,Args&&...)"></a>
<pre><code class="language-cpp">(1) template &lt;class U, class... Args&gt;
T&amp;</code></pre>
emplace(std::initializer\_list\<U\> il, Args &&... args);
### Function `tl::optional::swap`<a id="tl::optional-T-::swap(optional-T-&)"></a> ### Function `tl::optional::swap`<a id="tl::optional-T-::swap(optional-T-&)"></a>
<pre><code class="language-cpp">void swap(<a href='doc_optional.md#tl::optional-T-'>optional</a>&amp; rhs) noexcept(std::is_nothrow_move_constructible&lt;T&gt;::value&amp;&amp;detail::is_nothrow_swappable&lt;T&gt;::value);</code></pre> <pre><code class="language-cpp">void swap(<a href='doc_optional.html#tl::optional-T-'>optional</a>&amp; rhs) noexcept(std::is_nothrow_move_constructible&lt;T&gt;::value&amp;&amp;detail::is_nothrow_swappable&lt;T&gt;::value);</code></pre>
Swaps this optional with the other. Swaps this optional with the other.
@@ -577,22 +586,22 @@ Destroys the stored value if one exists, making the optional empty
## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,constoptional-U-&)"></a> ## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,constoptional-U-&)"></a>
<pre><code class="language-cpp">(1) template &lt;class T, class U&gt; <pre><code class="language-cpp">(1) template &lt;class T, class U&gt;
constexpr bool operator==(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool operator==(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
(2) template &lt;class T, class U&gt; (2) template &lt;class T, class U&gt;
constexpr bool operator!=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool operator!=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
(3) template &lt;class T, class U&gt; (3) template &lt;class T, class U&gt;
constexpr bool operator&lt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool operator&lt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
(4) template &lt;class T, class U&gt; (4) template &lt;class T, class U&gt;
constexpr bool operator&gt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool operator&gt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
(5) template &lt;class T, class U&gt; (5) template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs); constexpr bool operator&lt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);
(6) template &lt;class T, class U&gt; (6) template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);</code></pre> constexpr bool operator&gt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;U&gt;</a>&amp; rhs);</code></pre>
Compares two optional objects Compares two optional objects
@@ -601,40 +610,40 @@ If both optionals contain a value, they are compared with `T`s relational operat
## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,tl::nullopt_t)"></a> ## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,tl::nullopt_t)"></a>
<pre><code class="language-cpp">(1) template &lt;class T&gt; <pre><code class="language-cpp">(1) template &lt;class T&gt;
constexpr bool operator==(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator==(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(2) template &lt;class T&gt; (2) template &lt;class T&gt;
constexpr bool operator==(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool operator==(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
(3) template &lt;class T&gt; (3) template &lt;class T&gt;
constexpr bool operator!=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator!=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(4) template &lt;class T&gt; (4) template &lt;class T&gt;
constexpr bool operator!=(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool operator!=(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
(5) template &lt;class T&gt; (5) template &lt;class T&gt;
constexpr bool operator&lt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator&lt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(6) template &lt;class T&gt; (6) template &lt;class T&gt;
constexpr bool operator&lt;(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept; constexpr bool operator&lt;(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;
(7) template &lt;class T&gt; (7) template &lt;class T&gt;
constexpr bool operator&lt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator&lt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(8) template &lt;class T&gt; (8) template &lt;class T&gt;
constexpr bool operator&lt;=(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept; constexpr bool operator&lt;=(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept;
(9) template &lt;class T&gt; (9) template &lt;class T&gt;
constexpr bool operator&gt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator&gt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(10) template &lt;class T&gt; (10) template &lt;class T&gt;
constexpr bool operator&gt;(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept; constexpr bool operator&gt;(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;) noexcept;
(11) template &lt;class T&gt; (11) template &lt;class T&gt;
constexpr bool operator&gt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>) noexcept; constexpr bool operator&gt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp;, <a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>) noexcept;
(12) template &lt;class T&gt; (12) template &lt;class T&gt;
constexpr bool operator&gt;=(<a href='doc_optional.md#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;</code></pre> constexpr bool operator&gt;=(<a href='doc_optional.html#tl::nullopt_t'>nullopt_t</a>, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs) noexcept;</code></pre>
Compares an optional to a `nullopt` Compares an optional to a `nullopt`
@@ -643,43 +652,50 @@ Equivalent to comparing the optional to an empty optional
## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,constU&)"></a> ## Comparison operator `tl::operator==`<a id="tl::operator==(constoptional-T-&,constU&)"></a>
<pre><code class="language-cpp">(1) template &lt;class T, class U&gt; <pre><code class="language-cpp">(1) template &lt;class T, class U&gt;
constexpr bool operator==(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator==(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(2) template &lt;class T, class U&gt; (2) template &lt;class T, class U&gt;
constexpr bool operator==(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool operator==(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
(3) template &lt;class T, class U&gt; (3) template &lt;class T, class U&gt;
constexpr bool operator!=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator!=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(4) template &lt;class T, class U&gt; (4) template &lt;class T, class U&gt;
constexpr bool operator!=(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool operator!=(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
(5) template &lt;class T, class U&gt; (5) template &lt;class T, class U&gt;
constexpr bool operator&lt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator&lt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(6) template &lt;class T, class U&gt; (6) template &lt;class T, class U&gt;
constexpr bool operator&lt;(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool operator&lt;(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
(7) template &lt;class T, class U&gt; (7) template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator&lt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(8) template &lt;class T, class U&gt; (8) template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool operator&lt;=(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
(9) template &lt;class T, class U&gt; (9) template &lt;class T, class U&gt;
constexpr bool operator&gt;(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator&gt;(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(10) template &lt;class T, class U&gt; (10) template &lt;class T, class U&gt;
constexpr bool operator&gt;(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs); constexpr bool operator&gt;(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);
(11) template &lt;class T, class U&gt; (11) template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs); constexpr bool operator&gt;=(const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; lhs, const U&amp; rhs);
(12) template &lt;class T, class U&gt; (12) template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const U&amp; lhs, const <a href='doc_optional.md#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);</code></pre> constexpr bool operator&gt;=(const U&amp; lhs, const <a href='doc_optional.html#tl::optional-T-'>optional&lt;T&gt;</a>&amp; rhs);</code></pre>
Compares the optional with a value. Compares the optional with a value.
If the optional has a value, it is compared with the other value using `T`s relational operators. Otherwise, the optional is considered less than the value. If the optional has a value, it is compared with the other value using `T`s relational operators. Otherwise, the optional is considered less than the value.
## Function template `tl::swap`<a id="tl::swap(optional-T-&,optional-T-&)"></a>
<pre><code class="language-cpp">template &lt;class T&gt;
void swap(optional&lt;T&gt; &amp;lhs, optional&lt;T&gt;</code></pre>
\&rhs);
----- -----