mirror of
https://github.com/boostorg/optional.git
synced 2025-07-23 17:17:17 +02:00
test and doc update for .map()
This commit is contained in:
@ -260,6 +260,8 @@ They are empty, trivially copyable classes with disabled default constructor.
|
|||||||
|
|
||||||
template<class F> T& value_or_eval( F f ) const ; ``[link reference_optional_ref_value_or_eval __GO_TO__]``
|
template<class F> T& value_or_eval( F f ) const ; ``[link reference_optional_ref_value_or_eval __GO_TO__]``
|
||||||
|
|
||||||
|
template<class F> auto map( F f ) const -> ``['see below]``; ``[link reference_optional_ref_map __GO_TO__]``
|
||||||
|
|
||||||
T* get_ptr() const noexcept ; ``[link reference_optional_ref_get_ptr __GO_TO__]``
|
T* get_ptr() const noexcept ; ``[link reference_optional_ref_get_ptr __GO_TO__]``
|
||||||
|
|
||||||
bool has_value() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``
|
bool has_value() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``
|
||||||
|
@ -687,20 +687,20 @@ __SPACE__
|
|||||||
|
|
||||||
[#reference_optional_map]
|
[#reference_optional_map]
|
||||||
|
|
||||||
[: `template<class F> auto optional<T>::map(F f) const& -> ``['see below]`` ;`]
|
[: `template<class F> auto optional<T>::map(F f) const& -> `['see below]` ;`]
|
||||||
[: `template<class F> auto optional<T>::map(F f) & -> ``['see below]`` ;`]
|
[: `template<class F> auto optional<T>::map(F f) & -> `['see below]` ;`]
|
||||||
|
|
||||||
* [*Effects:] `if (*this) return f(**this); else return none;`
|
* [*Effects:] `if (*this) return f(**this); else return none;`
|
||||||
* [*Notes:] The return type of these overloads is `optional<decltype(f(**this)>`. On compilers that do not support ref-qualifiers on member functions, these two (as well as the next one) overloads are replaced with good old const and non-const overloads.
|
* [*Notes:] The return type of these overloads is `optional<decltype(f(**this))>`. On compilers that do not support ref-qualifiers on member functions, these two (as well as the next one) overloads are replaced with good old const and non-const overloads.
|
||||||
|
|
||||||
__SPACE__
|
__SPACE__
|
||||||
|
|
||||||
[#reference_optional_map_move]
|
[#reference_optional_map_move]
|
||||||
|
|
||||||
[: `template<class F> auto optional<T>::map(F f) && -> ``['see below]`` ;`]
|
[: `template<class F> auto optional<T>::map(F f) && -> `['see below]` ;`]
|
||||||
|
|
||||||
* [*Effects:] `if (*this) return f(std::move(**this)); else return none;`
|
* [*Effects:] `if (*this) return f(std::move(**this)); else return none;`
|
||||||
* [*Notes:] The return type of this overload is `optional<decltype(f(istd::move(**this))>`.
|
* [*Notes:] The return type of this overload is `optional<decltype(f(istd::move(**this)))>`.
|
||||||
|
|
||||||
__SPACE__
|
__SPACE__
|
||||||
|
|
||||||
@ -1053,6 +1053,13 @@ __SPACE__
|
|||||||
|
|
||||||
__SPACE__
|
__SPACE__
|
||||||
|
|
||||||
|
[#reference_optional_ref_map]
|
||||||
|
[: `template<class F> auto optional<T&>::map( F f ) const -> `['see below]`;`]
|
||||||
|
* [*Effects:] Equivalent to `if (*this) return f(**this); else return none;`.
|
||||||
|
* [*Remarks:] The return type of this function is `optional<decltype(f(**this))>`.
|
||||||
|
|
||||||
|
__SPACE__
|
||||||
|
|
||||||
[#reference_optional_ref_get_ptr]
|
[#reference_optional_ref_get_ptr]
|
||||||
[: `T* optional<T&>::get_ptr () const noexcept;`]
|
[: `T* optional<T&>::get_ptr () const noexcept;`]
|
||||||
* [*Returns:] `ref`.
|
* [*Returns:] `ref`.
|
||||||
|
@ -407,6 +407,21 @@
|
|||||||
is ill-formed.
|
is ill-formed.
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
|
<p>
|
||||||
|
<span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
|
||||||
|
</p>
|
||||||
|
<a name="reference_optional_ref_map"></a><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
|
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">&>::</span><span class="identifier">map</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">-></span> </code><span class="emphasis"><em>see below</em></span><code class="computeroutput"><span class="special">;</span></code>
|
||||||
|
</p></blockquote></div>
|
||||||
|
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||||||
|
<li class="listitem">
|
||||||
|
<span class="bold"><strong>Effects:</strong></span> Equivalent to <code class="computeroutput"><span class="keyword">if</span> <span class="special">(*</span><span class="keyword">this</span><span class="special">)</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">(**</span><span class="keyword">this</span><span class="special">);</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">none</span><span class="special">;</span></code>.
|
||||||
|
</li>
|
||||||
|
<li class="listitem">
|
||||||
|
<span class="bold"><strong>Remarks:</strong></span> The return type of this function
|
||||||
|
is <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">f</span><span class="special">(**</span><span class="keyword">this</span><span class="special">))></span></code>.
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
<p>
|
<p>
|
||||||
<span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
|
<span class="inlinemediaobject"><img src="../../../images/space.png" alt="space"></span>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1476,10 +1476,10 @@
|
|||||||
</p>
|
</p>
|
||||||
<a name="reference_optional_map"></a><div class="blockquote"><blockquote class="blockquote"><p>
|
<a name="reference_optional_map"></a><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">-></span>
|
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="keyword">const</span><span class="special">&</span> <span class="special">-></span>
|
||||||
</code><code class="computeroutput"><span class="special">[</span><span class="error">'</span><span class="identifier">see</span> <span class="identifier">below</span><span class="special">]</span></code><code class="computeroutput"> <span class="special">;</span></code>
|
</code><span class="emphasis"><em>see below</em></span><code class="computeroutput"> <span class="special">;</span></code>
|
||||||
</p></blockquote></div>
|
</p></blockquote></div>
|
||||||
<div class="blockquote"><blockquote class="blockquote"><p>
|
<div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&</span> <span class="special">-></span> </code><code class="computeroutput"><span class="special">[</span><span class="error">'</span><span class="identifier">see</span> <span class="identifier">below</span><span class="special">]</span></code><code class="computeroutput">
|
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&</span> <span class="special">-></span> </code><span class="emphasis"><em>see below</em></span><code class="computeroutput">
|
||||||
<span class="special">;</span></code>
|
<span class="special">;</span></code>
|
||||||
</p></blockquote></div>
|
</p></blockquote></div>
|
||||||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||||||
@ -1490,7 +1490,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="listitem">
|
<li class="listitem">
|
||||||
<span class="bold"><strong>Notes:</strong></span> The return type of these overloads
|
<span class="bold"><strong>Notes:</strong></span> The return type of these overloads
|
||||||
is <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">f</span><span class="special">(**</span><span class="keyword">this</span><span class="special">)></span></code>.
|
is <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">f</span><span class="special">(**</span><span class="keyword">this</span><span class="special">))></span></code>.
|
||||||
On compilers that do not support ref-qualifiers on member functions,
|
On compilers that do not support ref-qualifiers on member functions,
|
||||||
these two (as well as the next one) overloads are replaced with good
|
these two (as well as the next one) overloads are replaced with good
|
||||||
old const and non-const overloads.
|
old const and non-const overloads.
|
||||||
@ -1501,7 +1501,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<a name="reference_optional_map_move"></a><div class="blockquote"><blockquote class="blockquote"><p>
|
<a name="reference_optional_map_move"></a><div class="blockquote"><blockquote class="blockquote"><p>
|
||||||
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&&</span>
|
<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">optional</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">map</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">&&</span>
|
||||||
<span class="special">-></span> </code><code class="computeroutput"><span class="special">[</span><span class="error">'</span><span class="identifier">see</span> <span class="identifier">below</span><span class="special">]</span></code><code class="computeroutput">
|
<span class="special">-></span> </code><span class="emphasis"><em>see below</em></span><code class="computeroutput">
|
||||||
<span class="special">;</span></code>
|
<span class="special">;</span></code>
|
||||||
</p></blockquote></div>
|
</p></blockquote></div>
|
||||||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||||||
@ -1512,7 +1512,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="listitem">
|
<li class="listitem">
|
||||||
<span class="bold"><strong>Notes:</strong></span> The return type of this overload
|
<span class="bold"><strong>Notes:</strong></span> The return type of this overload
|
||||||
is <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">f</span><span class="special">(</span><span class="identifier">istd</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">))></span></code>.
|
is <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">f</span><span class="special">(</span><span class="identifier">istd</span><span class="special">::</span><span class="identifier">move</span><span class="special">(**</span><span class="keyword">this</span><span class="special">)))></span></code>.
|
||||||
</li>
|
</li>
|
||||||
</ul></div>
|
</ul></div>
|
||||||
<p>
|
<p>
|
||||||
|
@ -73,6 +73,8 @@
|
|||||||
|
|
||||||
<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_value_or_eval"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">value_or_eval</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_value_or_eval"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
||||||
|
|
||||||
|
<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="keyword">auto</span> <span class="identifier">map</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">f</span> <span class="special">)</span> <span class="keyword">const</span> <span class="special">-></span> <span class="emphasis"><em>see below</em></span><span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_map"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
||||||
|
|
||||||
<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_get_ptr"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get_ptr</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_get_ptr"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
||||||
|
|
||||||
<span class="keyword">bool</span> <span class="identifier">has_value</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_operator_bool"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
<span class="keyword">bool</span> <span class="identifier">has_value</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span> <span class="special">;</span> <a class="link" href="detailed_semantics___optional_references.html#reference_optional_ref_operator_bool"><span class="inlinemediaobject"><img src="../../../images/callouts/R.png" alt="R"></span></a>
|
||||||
|
@ -145,7 +145,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||||
<td align="left"><p><small>Last revised: June 23, 2018 at 16:25:31 GMT</small></p></td>
|
<td align="left"><p><small>Last revised: June 23, 2018 at 18:49:36 GMT</small></p></td>
|
||||||
<td align="right"><div class="copyright-footer"></div></td>
|
<td align="right"><div class="copyright-footer"></div></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -106,6 +106,34 @@ void test_map()
|
|||||||
optional<Int> oI = oi.map(convert_t());
|
optional<Int> oI = oi.map(convert_t());
|
||||||
BOOST_TEST(bool(oI));
|
BOOST_TEST(bool(oI));
|
||||||
BOOST_TEST_EQ(1, oI->i);
|
BOOST_TEST_EQ(1, oI->i);
|
||||||
|
|
||||||
|
optional<Int> o_ = optional<int>().map(convert_t());
|
||||||
|
BOOST_TEST(!o_);
|
||||||
|
}
|
||||||
|
|
||||||
|
optional<Int> make_opt_int(int i)
|
||||||
|
{
|
||||||
|
if (i != 0)
|
||||||
|
return Int(i);
|
||||||
|
else
|
||||||
|
return boost::none;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_map_optional()
|
||||||
|
{
|
||||||
|
optional<int> o9 (9), o0 (0), o_;
|
||||||
|
verify_type<optional<optional<Int>>>(o9.map(make_opt_int));
|
||||||
|
optional<optional<Int>> oo9 = o9.map(make_opt_int);
|
||||||
|
BOOST_TEST(bool(oo9));
|
||||||
|
BOOST_TEST(bool(*oo9));
|
||||||
|
BOOST_TEST_EQ(9, (**oo9).i);
|
||||||
|
|
||||||
|
optional<optional<Int>> oo0 = o0.map(make_opt_int);
|
||||||
|
BOOST_TEST(bool(oo0));
|
||||||
|
BOOST_TEST(!*oo0);
|
||||||
|
|
||||||
|
optional<optional<Int>> oo_ = o_.map(make_opt_int);
|
||||||
|
BOOST_TEST(!oo_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_map_with_lambda()
|
void test_map_with_lambda()
|
||||||
@ -153,7 +181,9 @@ int main()
|
|||||||
#endif
|
#endif
|
||||||
test_map_with_lambda();
|
test_map_with_lambda();
|
||||||
test_map();
|
test_map();
|
||||||
|
test_map_optional();
|
||||||
test_map_to_ref();
|
test_map_to_ref();
|
||||||
|
test_map_optional();
|
||||||
test_map_optional_ref();
|
test_map_optional_ref();
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
|
Reference in New Issue
Block a user