2007-05-29 06:40:25 +00:00
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > Detailed Semantics< / title >
< link rel = "stylesheet" href = "../boostbook.css" type = "text/css" >
2009-11-20 10:26:23 +00:00
< meta name = "generator" content = "DocBook XSL Stylesheets V1.75.2" >
2009-02-12 14:01:48 +00:00
< link rel = "home" href = "../index.html" title = "Chapter<65> 1.<2E> Boost.Optional" >
2007-05-29 06:40:25 +00:00
< link rel = "up" href = "../index.html" title = "Chapter<65> 1.<2E> Boost.Optional" >
< link rel = "prev" href = "synopsis.html" title = "Synopsis" >
< link rel = "next" href = "examples.html" title = "Examples" >
< / head >
< body bgcolor = "white" text = "black" link = "#0000FF" vlink = "#840084" alink = "#0000FF" >
2008-02-14 17:43:52 +00:00
< table cellpadding = "2" width = "100%" > < tr >
< td valign = "top" > < img alt = "Boost C++ Libraries" width = "277" height = "86" src = "../../../../../boost.png" > < / td >
2009-02-12 14:01:48 +00:00
< td align = "center" > < a href = "../../../../../index.html" > Home< / a > < / td >
2008-02-14 17:43:52 +00:00
< td align = "center" > < a href = "../../../../libraries.htm" > Libraries< / a > < / td >
2009-02-12 14:01:48 +00:00
< td align = "center" > < a href = "http://www.boost.org/users/people.html" > People< / a > < / td >
< td align = "center" > < a href = "http://www.boost.org/users/faq.html" > FAQ< / a > < / td >
2008-02-14 17:43:52 +00:00
< td align = "center" > < a href = "../../../../../more/index.htm" > More< / a > < / td >
< / tr > < / table >
2007-05-29 06:40:25 +00:00
< hr >
< div class = "spirit-nav" >
2008-02-14 17:43:52 +00:00
< a accesskey = "p" href = "synopsis.html" > < img src = "../../../../../doc/html/images/prev.png" alt = "Prev" > < / a > < a accesskey = "u" href = "../index.html" > < img src = "../../../../../doc/html/images/up.png" alt = "Up" > < / a > < a accesskey = "h" href = "../index.html" > < img src = "../../../../../doc/html/images/home.png" alt = "Home" > < / a > < a accesskey = "n" href = "examples.html" > < img src = "../../../../../doc/html/images/next.png" alt = "Next" > < / a >
2007-05-29 06:40:25 +00:00
< / div >
2009-11-20 10:26:23 +00:00
< div class = "section" title = "Detailed Semantics" >
2007-05-29 06:40:25 +00:00
< div class = "titlepage" > < div > < div > < h2 class = "title" style = "clear: both" >
2009-02-12 14:01:48 +00:00
< a name = "boost_optional.detailed_semantics" > < / a > < a class = "link" href = "detailed_semantics.html" title = "Detailed Semantics" > Detailed Semantics< / a >
2007-05-29 06:40:25 +00:00
< / h2 > < / div > < / div > < / div >
< p >
Because < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > might be of reference
type, in the sequel, those entries whose semantic depends on < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > being of reference type or not will be
2008-02-14 17:43:52 +00:00
distinguished using the following convention:
2007-05-29 06:40:25 +00:00
< / p >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2008-02-14 17:43:52 +00:00
If the entry reads: < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not
a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < / code > , the description
corresponds only to the case where < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
is not of reference type.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2008-02-14 17:43:52 +00:00
If the entry reads: < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < / code > ,
the description corresponds only to the case where < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
is of reference type.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2008-02-14 17:43:52 +00:00
If the entry reads: < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < / code > ,
the description is the same for both cases.
< / li >
< / ul > < / div >
2009-11-20 10:26:23 +00:00
< div class = "note" title = "Note" > < table border = "0" summary = "Note" >
2007-05-29 06:40:25 +00:00
< tr >
2008-02-14 17:43:52 +00:00
< td rowspan = "2" align = "center" valign = "top" width = "25" > < img alt = "[Note]" src = "../../../../../doc/html/images/note.png" > < / td >
2007-05-29 06:40:25 +00:00
< th align = "left" > Note< / th >
< / tr >
2008-02-14 17:43:52 +00:00
< tr > < td align = "left" valign = "top" > < p >
The following section contains various < code class = "computeroutput" > < span class = "identifier" > assert< / span > < span class = "special" > ()< / span > < / code > which are used only to show the postconditions
as sample code. It is not implied that the type < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
must support each particular expression but that if the expression is supported,
the implied condition holds.
< / p > < / td > < / tr >
2007-05-29 06:40:25 +00:00
< / table > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "boost_optional.detailed_semantics.optional_class_member_functions" > < / a > < h4 >
2009-11-20 10:26:23 +00:00
< a name = "id560085" > < / a >
2009-02-12 14:01:48 +00:00
< a class = "link" href = "detailed_semantics.html#boost_optional.detailed_semantics.optional_class_member_functions" > optional
2007-05-29 06:40:25 +00:00
class member functions< / a >
< / h4 >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > ();< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Default-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is < span class = "underline" > uninitialized< / span > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
Notes: T's default constructor < span class = "underline" > is not< / span >
called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > def< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_none_t" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > none_t< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code >
uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is < span class = "underline" > uninitialized< / span > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
default constructor < span class = "underline" > is not< / span > called.
The expression < code class = "computeroutput" > < span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > none< / span > < / code > denotes an instance of < code class = "computeroutput" > < span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > none_t< / span > < / code > that can be used as the parameter.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "preprocessor" > #include< / span > < span class = "special" > < < / span > < span class = "identifier" > boost< / span > < span class = "special" > /< / span > < span class = "identifier" > none< / span > < span class = "special" > .< / span > < span class = "identifier" > hpp< / span > < span class = "special" > > < / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > n< / span > < span class = "special" > (< / span > < span class = "identifier" > none< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > n< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Directly-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is < span class = "underline" > initialized< / span >
and its value is a< span class = "emphasis" > < em > copy< / em > < / span > of < code class = "computeroutput" > < span class = "identifier" > v< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes: < / strong > < / span > < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > is
called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > Exceptions can only be
thrown during < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > );< / span > < / code > in that case, this constructor
has no effect.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > ref< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Directly-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is < span class = "underline" > initialized< / span >
and its value is an instance of an internal type wrapping the reference
< code class = "computeroutput" > < span class = "identifier" > ref< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > vref< / span > < span class = "special" > =< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > vref< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "special" > ++< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span > < span class = "comment" > // mutate referee
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (*< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_bool_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "keyword" > bool< / span > < span class = "identifier" > condition< / span > < span class = "special" > ,< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span >
< span class = "special" > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "keyword" > bool< / span > < span class = "identifier" > condition< / span > < span class = "special" > ,< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > v< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" > < li class = "listitem" >
2007-05-29 06:40:25 +00:00
If condition is true, same as:
< / li > < / ul > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span >
< span class = "special" > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" > < li class = "listitem" >
2007-05-29 06:40:25 +00:00
otherwise, same as:
< / li > < / ul > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
2009-11-20 10:26:23 +00:00
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > [< / span > < span class = "error" > '< / span > < span class = "special" > (< / span > < span class = "keyword" > not< / span > < span class = "identifier" > a< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > ref< / span > < span class = "special" > )]> ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > ()< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span >
< span class = "special" > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > ()< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > rhs< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Copy-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If rhs is initialized,
< code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initialized and its value is a < span class = "emphasis" > < em > copy< / em > < / span > of the value
of < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > ; else < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If rhs is initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > is
called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > Exceptions can only be
thrown during < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > );< / span > < / code > in that case, this constructor
has no effect.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > uninit< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (!< / span > < span class = "identifier" > uninit< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > uinit2< / span > < span class = "special" > (< / span > < span class = "identifier" > uninit< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > uninit2< / span > < span class = "special" > ==< / span > < span class = "identifier" > uninit< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > init< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "number" > 2< / span > < span class = "special" > )< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > init< / span > < span class = "special" > ==< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "number" > 2< / span > < span class = "special" > )< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > init2< / span > < span class = "special" > (< / span > < span class = "identifier" > init< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > init2< / span > < span class = "special" > ==< / span > < span class = "identifier" > init< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > rhs< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Copy-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
is initialized, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initialized and its value is another reference to the same object referenced
by < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "identifier" > rhs< / span > < / code > ;
else < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
is initialized, both < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
and < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "identifier" > rhs< / span > < / code >
will reefer to the same object (they alias).
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "identifier" > uninit< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (!< / span > < span class = "identifier" > uninit< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "identifier" > uinit2< / span > < span class = "special" > (< / span > < span class = "identifier" > uninit< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > uninit2< / span > < span class = "special" > ==< / span > < span class = "identifier" > uninit< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > =< / span > < span class = "number" > 2< / span > < span class = "special" > ;< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > ref< / span > < span class = "special" > =< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > init< / span > < span class = "special" > (< / span > < span class = "identifier" > ref< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > init< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > init2< / span > < span class = "special" > (< / span > < span class = "identifier" > init< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > init2< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > v< / span > < span class = "special" > =< / span > < span class = "number" > 3< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > init< / span > < span class = "special" > ==< / span > < span class = "number" > 3< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > init2< / span > < span class = "special" > ==< / span > < span class = "number" > 3< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_other_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > template< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > < / span > < span class = "keyword" > explicit< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > rhs< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Copy-Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
is initialized, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initialized and its value is a < span class = "emphasis" > < em > copy< / em > < / span > of the value
of rhs converted to type < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > ;
else < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > U< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes: < / strong > < / span > < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > U< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > is
called if < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > is initialized,
which requires a valid conversion from < code class = "computeroutput" > < span class = "identifier" > U< / span > < / code >
to < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > Exceptions can only be
thrown during < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > U< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > );< / span > < / code > in that case, this constructor
has no effect.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > double< / span > < span class = "special" > > < / span > < span class = "identifier" > x< / span > < span class = "special" > (< / span > < span class = "number" > 123.4< / span > < span class = "special" > );< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > x< / span > < span class = "special" > ==< / span > < span class = "number" > 123.4< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > > < / span > < span class = "identifier" > y< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > y< / span > < span class = "special" > ==< / span > < span class = "number" > 123< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_constructor_factory" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > template< / span > < span class = "special" > < < / span > < span class = "identifier" > InPlaceFactory< / span > < span class = "special" > > < / span >
< span class = "keyword" > explicit< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > InPlaceFactory< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > f< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > template< / span > < span class = "special" > < < / span > < span class = "identifier" > TypedInPlaceFactory< / span > < span class = "special" > > < / span >
< span class = "keyword" > explicit< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > optional< / span > < span class = "special" > (< / span > < span class = "identifier" > TypedInPlaceFactory< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > f< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Constructs an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code >
with a value of < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > obtained
from the factory.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is < span class = "underline" > initialized< / span >
and its value is < span class = "emphasis" > < em > directly given< / em > < / span > from the factory < code class = "computeroutput" > < span class = "identifier" > f< / span > < / code > (i.e., the value < span class = "underline" > is
not copied< / span > ).
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever the < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
constructor called by the factory throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > See < a class = "link" href = "in_place_factories.html" title = "In-Place Factories" > In-Place
2007-05-29 06:40:25 +00:00
Factories< / a >
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > Exceptions can only be
thrown during the call to the < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
constructor used by the factory; in that case, this constructor has no effect.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "keyword" > class< / span > < span class = "identifier" > C< / span > < span class = "special" > {< / span > < span class = "identifier" > C< / span > < span class = "special" > (< / span > < span class = "keyword" > char< / span > < span class = "special" > ,< / span > < span class = "keyword" > double< / span > < span class = "special" > ,< / span > < span class = "identifier" > std< / span > < span class = "special" > ::< / span > < span class = "identifier" > string< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < span class = "special" > }< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > C< / span > < span class = "identifier" > v< / span > < span class = "special" > (< / span > < span class = "char" > 'A'< / span > < span class = "special" > ,< / span > < span class = "number" > 123.4< / span > < span class = "special" > ,< / span > < span class = "string" > "hello"< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > C< / span > < span class = "special" > > < / span > < span class = "identifier" > x< / span > < span class = "special" > (< / span > < span class = "identifier" > in_place< / span > < span class = "special" > (< / span > < span class = "char" > 'A'< / span > < span class = "special" > ,< / span > < span class = "number" > 123.4< / span > < span class = "special" > ,< / span > < span class = "string" > "hello"< / span > < span class = "special" > )< / span > < span class = "special" > );< / span > < span class = "comment" > // InPlaceFactory used
< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > C< / span > < span class = "special" > > < / span > < span class = "identifier" > y< / span > < span class = "special" > (< / span > < span class = "identifier" > in_place< / span > < span class = "special" > < < / span > < span class = "identifier" > C< / span > < span class = "special" > > (< / span > < span class = "char" > 'A'< / span > < span class = "special" > ,< / span > < span class = "number" > 123.4< / span > < span class = "special" > ,< / span > < span class = "string" > "hello"< / span > < span class = "special" > )< / span > < span class = "special" > );< / span > < span class = "comment" > // TypedInPlaceFactory used
< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > x< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > y< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_equal_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > rhs< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Assigns the value < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > to an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized and its value is a < span class = "emphasis" > < em > copy< / em > < / span >
of < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =(< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > or
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & )< / span > < / code >
throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > was initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
assignment operator is used, otherwise, its copy-constructor is used.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > In the event of an exception,
the initialization state of < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is unchanged and its value unspecified
as far as < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > is concerned
(it is up to < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's < code class = "computeroutput" > < span class = "keyword" > operator< / span > < span class = "special" > =()< / span > < / code > ).
If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initially uninitialized and < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< span class = "emphasis" > < em > copy constructor< / em > < / span > fails, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is left properly uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > x< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "identifier" > y< / span > < span class = "special" > ;< / span >
< span class = "identifier" > def< / span > < span class = "special" > =< / span > < span class = "identifier" > y< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > def< / span > < span class = "special" > ==< / span > < span class = "identifier" > y< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > opt< / span > < span class = "special" > =< / span > < span class = "identifier" > y< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > y< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > rhs< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > (Re)binds thee wrapped reference.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized and it references the
same object referenced by < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > was initialized, is is < span class = "emphasis" > < em > rebound< / em > < / span >
2009-02-12 14:01:48 +00:00
to the new object. See < a class = "link" href = "rebinding_semantics_for_assignment_of_optional_references.html" title = "Rebinding semantics for assignment of optional references" > here< / a >
for details on this behavior.
2007-05-29 06:40:25 +00:00
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "keyword" > int< / span > < span class = "identifier" > a< / span > < span class = "special" > =< / span > < span class = "number" > 1< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "keyword" > int< / span > < span class = "identifier" > b< / span > < span class = "special" > =< / span > < span class = "number" > 2< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > ra< / span > < span class = "special" > =< / span > < span class = "identifier" > a< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > rb< / span > < span class = "special" > =< / span > < span class = "identifier" > b< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > ra< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > def< / span > < span class = "special" > =< / span > < span class = "identifier" > rb< / span > < span class = "special" > ;< / span > < span class = "comment" > // binds 'def' to 'b' through 'rb'
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > def< / span > < span class = "special" > ==< / span > < span class = "identifier" > b< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "special" > *< / span > < span class = "identifier" > def< / span > < span class = "special" > =< / span > < span class = "identifier" > a< / span > < span class = "special" > ;< / span > < span class = "comment" > // changes the value of 'b' to a copy of the value of 'a'
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > b< / span > < span class = "special" > ==< / span > < span class = "identifier" > a< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "keyword" > int< / span > < span class = "identifier" > c< / span > < span class = "special" > =< / span > < span class = "number" > 3< / span > < span class = "special" > ;< / span >
< span class = "keyword" > int< / span > < span class = "special" > & < / span > < span class = "identifier" > rc< / span > < span class = "special" > =< / span > < span class = "identifier" > c< / span > < span class = "special" > ;< / span >
< span class = "identifier" > opt< / span > < span class = "special" > =< / span > < span class = "identifier" > rc< / span > < span class = "special" > ;< / span > < span class = "comment" > // REBINDS to 'c' through 'rc'
< / span > < span class = "identifier" > c< / span > < span class = "special" > =< / span > < span class = "number" > 4< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "number" > 4< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_equal_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > rhs< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Assigns another < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code >
to an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
is initialized, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initialized and its value is a < span class = "emphasis" > < em > copy< / em > < / span > of the value
of < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > ; else < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & )< / span > < / code > or < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If both < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > and < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
are initially initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< span class = "emphasis" > < em > assignment operator< / em > < / span > is used. If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initially initialized but < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > is uninitialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
[destructor] is called. If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initially uninitialized but < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > is initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< span class = "emphasis" > < em > copy constructor< / em > < / span > is called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > In the event of an exception,
the initialization state of < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is unchanged and its value unspecified
as far as optional is concerned (it is up to < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< code class = "computeroutput" > < span class = "keyword" > operator< / span > < span class = "special" > =()< / span > < / code > ).
If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initially uninitialized and < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< span class = "emphasis" > < em > copy constructor< / em > < / span > fails, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is left properly uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > opt< / span > < span class = "special" > =< / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > def< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "comment" > // previous value (copy of 'v') destroyed from within 'opt'.
< / span > < / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span >
< span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > rhs< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > (Re)binds thee wrapped reference.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "identifier" > rhs< / span > < / code > is initialized, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized and it references the
same object referenced by < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "identifier" > rhs< / span > < / code > ; otherwise, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is uninitialized (and references no object).
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > was initialized and so is *rhs, this
2009-02-12 14:01:48 +00:00
is is < span class = "emphasis" > < em > rebound< / em > < / span > to the new object. See < a class = "link" href = "rebinding_semantics_for_assignment_of_optional_references.html" title = "Rebinding semantics for assignment of optional references" > here< / a >
2007-05-29 06:40:25 +00:00
for details on this behavior.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "keyword" > int< / span > < span class = "identifier" > a< / span > < span class = "special" > =< / span > < span class = "number" > 1< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "keyword" > int< / span > < span class = "identifier" > b< / span > < span class = "special" > =< / span > < span class = "number" > 2< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > ra< / span > < span class = "special" > =< / span > < span class = "identifier" > a< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > rb< / span > < span class = "special" > =< / span > < span class = "identifier" > b< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > ora< / span > < span class = "special" > (< / span > < span class = "identifier" > ra< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > orb< / span > < span class = "special" > (< / span > < span class = "identifier" > rb< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > def< / span > < span class = "special" > =< / span > < span class = "identifier" > orb< / span > < span class = "special" > ;< / span > < span class = "comment" > // binds 'def' to 'b' through 'rb' wrapped within 'orb'
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > def< / span > < span class = "special" > ==< / span > < span class = "identifier" > b< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "special" > *< / span > < span class = "identifier" > def< / span > < span class = "special" > =< / span > < span class = "identifier" > ora< / span > < span class = "special" > ;< / span > < span class = "comment" > // changes the value of 'b' to a copy of the value of 'a'
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > b< / span > < span class = "special" > ==< / span > < span class = "identifier" > a< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "keyword" > int< / span > < span class = "identifier" > c< / span > < span class = "special" > =< / span > < span class = "number" > 3< / span > < span class = "special" > ;< / span >
< span class = "keyword" > int< / span > < span class = "special" > & < / span > < span class = "identifier" > rc< / span > < span class = "special" > =< / span > < span class = "identifier" > c< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > int< / span > < span class = "special" > & > < / span > < span class = "identifier" > orc< / span > < span class = "special" > (< / span > < span class = "identifier" > rc< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > ora< / span > < span class = "special" > =< / span > < span class = "identifier" > orc< / span > < span class = "special" > ;< / span > < span class = "comment" > // REBINDS ora to 'c' through 'rc'
< / span > < span class = "identifier" > c< / span > < span class = "special" > =< / span > < span class = "number" > 4< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > ora< / span > < span class = "special" > ==< / span > < span class = "number" > 4< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_equal_other_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > template< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > < / span > < span class = "identifier" > optional< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > rhs< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > Assigns another convertible optional
to an optional.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code >
is initialized, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initialized and its value is a < span class = "emphasis" > < em > copy< / em > < / span > of the value
of < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > < span class = "emphasis" > < em > converted< / em > < / span >
to type < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > ; else < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > =(< / span > < span class = "identifier" > U< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > or
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > U< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If both < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > and rhs are initially initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's < span class = "emphasis" > < em > assignment operator< / em > < / span >
(from < code class = "computeroutput" > < span class = "identifier" > U< / span > < / code > ) is used. If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initially
initialized but < code class = "computeroutput" > < span class = "identifier" > rhs< / span > < / code > is uninitialized,
< code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's < span class = "emphasis" > < em > destructor< / em > < / span >
is called. If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initially uninitialized but rhs is initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< span class = "emphasis" > < em > converting constructor< / em > < / span > (from < code class = "computeroutput" > < span class = "identifier" > U< / span > < / code > )
is called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > In the event of an exception,
the initialization state of < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is unchanged and its value unspecified
as far as optional is concerned (it is up to < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
< code class = "computeroutput" > < span class = "keyword" > operator< / span > < span class = "special" > =()< / span > < / code > ).
If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code >
is initially uninitialized and < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code > 's
converting constructor fails, < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is left properly uninitialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt0< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > < / span > < span class = "identifier" > opt1< / span > < span class = "special" > ;< / span >
< span class = "identifier" > opt1< / span > < span class = "special" > =< / span > < span class = "identifier" > opt0< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt1< / span > < span class = "special" > ==< / span > < span class = "keyword" > static_cast< / span > < span class = "special" > < < / span > < span class = "identifier" > U< / span > < span class = "special" > > (< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_reset_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > void< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > reset< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" > < li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Deprecated:< / strong > < / span > same as < code class = "computeroutput" > < span class = "keyword" > operator< / span > < span class = "special" > =< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / li > < / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_reset" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > void< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "identifier" > reset< / span > < span class = "special" > ()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" > < li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Deprecated:< / strong > < / span > Same as < code class = "computeroutput" > < span class = "keyword" > operator< / span > < span class = "special" > =(< / span > < span class = "identifier" > detail< / span > < span class = "special" > ::< / span > < span class = "identifier" > none_t< / span > < span class = "special" > );< / span > < / code >
< / li > < / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_get" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > *()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > *();< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get< / span > < span class = "special" > ()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get< / span > < span class = "special" > ()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > get< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > get< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span >
< span class = "special" > & )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Requirements:< / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > A reference to the contained value
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > The requirement is asserted via
< code class = "computeroutput" > < span class = "identifier" > BOOST_ASSERT< / span > < span class = "special" > ()< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > u< / span > < span class = "special" > =< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > u< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "identifier" > w< / span > < span class = "special" > ;< / span >
< span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > =< / span > < span class = "identifier" > w< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > w< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_get_value_or_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get_value_or< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "keyword" > default< / span > < span class = "special" > )< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get_value_or< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "keyword" > default< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > get_optional_value_or< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > o< / span > < span class = "special" > ,< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "keyword" > default< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > get_optional_value_or< / span >
< span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > & < / span >
< span class = "identifier" > o< / span > < span class = "special" > ,< / span >
< span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "keyword" > default< / span > < span class = "special" > )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > A reference to the contained value,
if any, or < code class = "computeroutput" > < span class = "keyword" > default< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ,< / span > < span class = "identifier" > z< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > =< / span > < span class = "identifier" > def< / span > < span class = "special" > .< / span > < span class = "identifier" > get_value_or< / span > < span class = "special" > (< / span > < span class = "identifier" > z< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > y< / span > < span class = "special" > ==< / span > < span class = "identifier" > z< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > u< / span > < span class = "special" > =< / span > < span class = "identifier" > get_optional_value_or< / span > < span class = "special" > (< / span > < span class = "identifier" > opt< / span > < span class = "special" > ,< / span > < span class = "identifier" > z< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > u< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > u< / span > < span class = "special" > !=< / span > < span class = "identifier" > z< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > *()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > *();< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "identifier" > get< / span > < span class = "special" > ()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > & < / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > ::< / span > < span class = "identifier" > get< / span > < span class = "special" > ()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "identifier" > get< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > get< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "special" > & )< / span >
< span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Requirements: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > < span class = "underline" > The< / span >
reference contained.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > The requirement is asserted via
< code class = "computeroutput" > < span class = "identifier" > BOOST_ASSERT< / span > < span class = "special" > ()< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > T< / span > < span class = "special" > & < / span > < span class = "identifier" > vref< / span > < span class = "special" > =< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > & > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > vref< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > vref2< / span > < span class = "special" > =< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > vref2< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "special" > ++< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > ==< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_get_ptr" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > *< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get_ptr< / span > < span class = "special" > ()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > *< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "identifier" > get_ptr< / span > < span class = "special" > ()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > *< / span >
< span class = "identifier" > get_pointer< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > inline< / span > < span class = "identifier" > T< / span > < span class = "special" > *< / span > < span class = "identifier" > get_pointer< / span >
< span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span >
< span class = "special" > & )< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized, a pointer to the contained
value; else < code class = "computeroutput" > < span class = "number" > 0< / span > < / code > (< span class = "emphasis" > < em > null< / em > < / span > ).
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > The contained value is permanently
stored within < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > ,
so you should not hold nor delete this pointer
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > v< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "identifier" > copt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "special" > *< / span > < span class = "identifier" > p< / span > < span class = "special" > =< / span > < span class = "identifier" > opt< / span > < span class = "special" > .< / span > < span class = "identifier" > get_ptr< / span > < span class = "special" > ()< / span > < span class = "special" > ;< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > *< / span > < span class = "identifier" > cp< / span > < span class = "special" > =< / span > < span class = "identifier" > copt< / span > < span class = "special" > .< / span > < span class = "identifier" > get_ptr< / span > < span class = "special" > ();< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > p< / span > < span class = "special" > ==< / span > < span class = "identifier" > get_pointer< / span > < span class = "special" > (< / span > < span class = "identifier" > opt< / span > < span class = "special" > )< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > cp< / span > < span class = "special" > ==< / span > < span class = "identifier" > get_pointer< / span > < span class = "special" > (< / span > < span class = "identifier" > copt< / span > < span class = "special" > )< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_arrow" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > *< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code >
< span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > -> ()< / span >
< span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > *< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span >
< span class = "special" > -> ()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Requirements: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is initialized.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > A pointer to the contained value.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > The requirement is asserted via
< code class = "computeroutput" > < span class = "identifier" > BOOST_ASSERT< / span > < span class = "special" > ()< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "keyword" > struct< / span > < span class = "identifier" > X< / span > < span class = "special" > {< / span > < span class = "keyword" > int< / span > < span class = "identifier" > mdata< / span > < span class = "special" > ;< / span > < span class = "special" > }< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > X< / span > < span class = "identifier" > x< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > X< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< span class = "identifier" > opt< / span > < span class = "special" > -> < / span > < span class = "identifier" > mdata< / span > < span class = "special" > =< / span > < span class = "number" > 2< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_bool" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < / code > < span class = "emphasis" > < em > unspecified-bool-type< / em > < / span > < code class = "computeroutput" > < span class = "special" > ()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > An unspecified value which if used
on a boolean context is equivalent to (< code class = "computeroutput" > < span class = "identifier" > get< / span > < span class = "special" > ()< / span > < span class = "special" > !=< / span > < span class = "number" > 0< / span > < / code > )
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def< / span > < span class = "special" > ==< / span > < span class = "number" > 0< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > opt< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > opt< / span > < span class = "special" > !=< / span > < span class = "number" > 0< / span > < span class = "special" > );< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_operator_not" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "keyword" > operator< / span > < span class = "special" > !()< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > If < code class = "computeroutput" > < span class = "special" > *< / span > < span class = "keyword" > this< / span > < / code > is uninitialized, < code class = "computeroutput" > < span class = "keyword" > true< / span > < / code > ;
else < code class = "computeroutput" > < span class = "keyword" > false< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > This operator is provided for those
compilers which can't use the < span class = "emphasis" > < em > unspecified-bool-type operator< / em > < / span >
in certain boolean contexts.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > opt< / span > < span class = "special" > );< / span >
< span class = "special" > *< / span > < span class = "identifier" > opt< / span > < span class = "special" > =< / span > < span class = "identifier" > some_T< / span > < span class = "special" > ;< / span >
< span class = "comment" > // Notice the "double-bang" idiom here.
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !!< / span > < span class = "identifier" > opt< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_optional_is_initialized" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "identifier" > is_initialized< / span > < span class = "special" > ()< / span > < span class = "keyword" > const< / span > < span class = "special" > ;< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "keyword" > true< / span > < / code >
if the < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code > is initialized,
< code class = "computeroutput" > < span class = "keyword" > false< / span > < / code > otherwise.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > def< / span > < span class = "special" > .< / span > < span class = "identifier" > is_initialized< / span > < span class = "special" > ()< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > opt< / span > < span class = "special" > (< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > opt< / span > < span class = "special" > .< / span > < span class = "identifier" > is_initialized< / span > < span class = "special" > ()< / span > < span class = "special" > );< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "boost_optional.detailed_semantics.free_functions" > < / a > < h4 >
2009-11-20 10:26:23 +00:00
< a name = "id572503" > < / a >
2009-02-12 14:01:48 +00:00
< a class = "link" href = "detailed_semantics.html#boost_optional.detailed_semantics.free_functions" > Free functions< / a >
2007-05-29 06:40:25 +00:00
< / h4 >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_make_optional_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < span class = "identifier" > make_optional< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > (< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code > for
the < span class = "emphasis" > < em > deduced< / em > < / span > type < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
of < code class = "computeroutput" > < span class = "identifier" > v< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "keyword" > template< / span > < span class = "special" > < < / span > < span class = "keyword" > class< / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > void< / span > < span class = "identifier" > foo< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > opt< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > foo< / span > < span class = "special" > (< / span > < span class = "identifier" > make_optional< / span > < span class = "special" > (< / span > < span class = "number" > 1< / span > < span class = "special" > +< / span > < span class = "number" > 1< / span > < span class = "special" > )< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span > < span class = "comment" > // Creates an optional< int>
< / span > < / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_make_optional_bool_value" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < / code > < span class = "emphasis" > < em > (not a ref)< / em > < / span > < code class = "computeroutput" > < span class = "special" > > < / span > < span class = "identifier" > make_optional< / span > < span class = "special" > (< / span > < span class = "keyword" > bool< / span > < span class = "identifier" > condition< / span > < span class = "special" > ,< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > (< / span > < span class = "identifier" > condition< / span > < span class = "special" > ,< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span > < / code > for
the < span class = "emphasis" > < em > deduced< / em > < / span > type < code class = "computeroutput" > < span class = "identifier" > T< / span > < / code >
of < code class = "computeroutput" > < span class = "identifier" > v< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > double< / span > < span class = "special" > > < / span > < span class = "identifier" > calculate_foo< / span > < span class = "special" > ()< / span >
2007-05-29 06:40:25 +00:00
< span class = "special" > {< / span >
< span class = "keyword" > double< / span > < span class = "identifier" > val< / span > < span class = "special" > =< / span > < span class = "identifier" > compute_foo< / span > < span class = "special" > ();< / span >
< span class = "keyword" > return< / span > < span class = "identifier" > make_optional< / span > < span class = "special" > (< / span > < span class = "identifier" > is_not_nan_and_finite< / span > < span class = "special" > (< / span > < span class = "identifier" > val< / span > < span class = "special" > ),< / span > < span class = "identifier" > val< / span > < span class = "special" > );< / span >
< span class = "special" > }< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "keyword" > double< / span > < span class = "special" > > < / span > < span class = "identifier" > v< / span > < span class = "special" > =< / span > < span class = "identifier" > calculate_foo< / span > < span class = "special" > ();< / span >
< span class = "keyword" > if< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > v< / span > < span class = "special" > )< / span >
< span class = "identifier" > error< / span > < span class = "special" > (< / span > < span class = "string" > "foo wasn't computed"< / span > < span class = "special" > );< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_equal_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > ==< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > If both < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code >
and < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code > are initialized, < code class = "computeroutput" > < span class = "special" > (*< / span > < span class = "identifier" > x< / span > < span class = "special" > ==< / span >
< span class = "special" > *< / span > < span class = "identifier" > y< / span > < span class = "special" > )< / span > < / code > . If only < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code >
or < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code > is initialized, < code class = "computeroutput" > < span class = "keyword" > false< / span > < / code > . If both are uninitialized, < code class = "computeroutput" > < span class = "keyword" > true< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > Pointers have shallow relational
operators while < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code >
has deep relational operators. Do not use < code class = "computeroutput" > < span class = "keyword" > operator< / span >
< span class = "special" > ==< / span > < / code > directly in generic code which
expect to be given either an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < / code >
or a pointer; use < a href = "../../../../utility/OptionalPointee.html#equal" target = "_top" > < code class = "computeroutput" > < span class = "identifier" > equal_pointees< / span > < span class = "special" > ()< / span > < / code > < / a >
instead
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > x< / span > < span class = "special" > (< / span > < span class = "number" > 12< / span > < span class = "special" > );< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > T< / span > < span class = "identifier" > y< / span > < span class = "special" > (< / span > < span class = "number" > 12< / span > < span class = "special" > );< / span >
< span class = "identifier" > T< / span > < span class = "identifier" > z< / span > < span class = "special" > (< / span > < span class = "number" > 21< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def0< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def1< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optX< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optY< / span > < span class = "special" > (< / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optZ< / span > < span class = "special" > (< / span > < span class = "identifier" > z< / span > < span class = "special" > );< / span >
< span class = "comment" > // Identity always hold
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ==< / span > < span class = "identifier" > def0< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > ==< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "comment" > // Both uninitialized compare equal
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ==< / span > < span class = "identifier" > def1< / span > < span class = "special" > );< / span >
< span class = "comment" > // Only one initialized compare unequal.
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > !=< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "comment" > // Both initialized compare as (*lhs == *rhs)
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > ==< / span > < span class = "identifier" > optY< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > !=< / span > < span class = "identifier" > optZ< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_less_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > < < / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns:< / strong > < / span > If < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code >
is not initialized, < code class = "computeroutput" > < span class = "keyword" > false< / span > < / code > . If
< code class = "computeroutput" > < span class = "identifier" > y< / span > < / code > is initialized and < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code > is not initialized, < code class = "computeroutput" > < span class = "keyword" > true< / span > < / code > .
If both < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code > and < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code > are initialized, < code class = "computeroutput" > < span class = "special" > (*< / span > < span class = "identifier" > x< / span > < span class = "special" > < < / span > < span class = "special" > *< / span > < span class = "identifier" > y< / span > < span class = "special" > )< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > Pointers have shallow relational
operators while < code class = "computeroutput" > < span class = "identifier" > optional< / span > < / code >
has deep relational operators. Do not use < code class = "computeroutput" > < span class = "keyword" > operator< / span >
< span class = "special" > < < / span > < / code > directly in generic code which
expect to be given either an < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < / code >
or a pointer; use < a href = "../../../../utility/OptionalPointee.html#less" target = "_top" > < code class = "computeroutput" > < span class = "identifier" > less_pointees< / span > < span class = "special" > ()< / span > < / code > < / a >
instead.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > x< / span > < span class = "special" > (< / span > < span class = "number" > 12< / span > < span class = "special" > );< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > T< / span > < span class = "identifier" > y< / span > < span class = "special" > (< / span > < span class = "number" > 34< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optX< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optY< / span > < span class = "special" > (< / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span >
< span class = "comment" > // Identity always hold
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !(< / span > < span class = "identifier" > def< / span > < span class = "special" > < < / span > < span class = "identifier" > def< / span > < span class = "special" > )< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > ==< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "comment" > // Both uninitialized compare equal
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ==< / span > < span class = "identifier" > def1< / span > < span class = "special" > );< / span >
< span class = "comment" > // Only one initialized compare unequal.
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > !=< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "comment" > // Both initialized compare as (*lhs == *rhs)
< / span > < span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > ==< / span > < span class = "identifier" > optY< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > !=< / span > < span class = "identifier" > optZ< / span > < span class = "special" > )< / span > < span class = "special" > ;< / span >
< / pre >
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_not_equal_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > !=< / span > < span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > !(< / span >
< span class = "identifier" > x< / span > < span class = "special" > ==< / span >
< span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_greater_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > > < / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > (< / span >
< span class = "identifier" > y< / span > < span class = "special" > < < / span >
< span class = "identifier" > x< / span > < span class = "special" > );< / span > < / code >
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_less_or_equal_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > < =< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > !(< / span >
< span class = "identifier" > y< / span > < span class = "special" > < < / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span > < / code >
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_operator_compare_greater_or_equal_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > bool< / span > < span class = "keyword" > operator< / span >
< span class = "special" > > =< / span > < span class = "special" > (< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Returns: < / strong > < / span > < code class = "computeroutput" > < span class = "special" > !(< / span >
< span class = "identifier" > x< / span > < span class = "special" > < < / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span > < / code >
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > Nothing.
< / li >
< / ul > < / div >
< p >
< span class = "inlinemediaobject" > < img src = "../images/space.png" alt = "space" > < / span >
< / p >
< a name = "reference_swap_optional_optional" > < / a > < p >
< / p >
< div class = "blockquote" > < blockquote class = "blockquote" >
< p >
< / p >
< p >
< code class = "computeroutput" > < span class = "keyword" > void< / span > < span class = "identifier" > swap< / span >
< span class = "special" > (< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > & < / span > < span class = "identifier" > x< / span > < span class = "special" > ,< / span > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > & < / span > < span class = "identifier" > y< / span >
< span class = "special" > );< / span > < / code >
< / p >
< p >
< / p >
< / blockquote > < / div >
2009-11-20 10:26:23 +00:00
< div class = "itemizedlist" > < ul class = "itemizedlist" type = "disc" >
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Effect:< / strong > < / span > If both < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code >
and < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code > are initialized, calls
< code class = "computeroutput" > < span class = "identifier" > swap< / span > < span class = "special" > (*< / span > < span class = "identifier" > x< / span > < span class = "special" > ,*< / span > < span class = "identifier" > y< / span > < span class = "special" > )< / span > < / code > using < code class = "computeroutput" > < span class = "identifier" > std< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < / code > .
If only one is initialized, say < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code > ,
calls: < code class = "computeroutput" > < span class = "identifier" > y< / span > < span class = "special" > .< / span > < span class = "identifier" > reset< / span > < span class = "special" > (*< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span > < span class = "identifier" > x< / span > < span class = "special" > .< / span > < span class = "identifier" > reset< / span > < span class = "special" > ();< / span > < / code > If none is initialized, does nothing.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Postconditions:< / strong > < / span > The states of < code class = "computeroutput" > < span class = "identifier" > x< / span > < / code > and < code class = "computeroutput" > < span class = "identifier" > y< / span > < / code >
interchanged.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Throws:< / strong > < / span > If both are initialized, whatever
< code class = "computeroutput" > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & ,< / span > < span class = "identifier" > T< / span > < span class = "special" > & )< / span > < / code >
throws. If only one is initialized, whatever < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span >
< span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > throws.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Notes:< / strong > < / span > If both are initialized, < code class = "computeroutput" > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & ,< / span > < span class = "identifier" > T< / span > < span class = "special" > & )< / span > < / code > is used unqualified but with < code class = "computeroutput" > < span class = "identifier" > std< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < / code >
introduced in scope. If only one is initialized, < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::~< / span > < span class = "identifier" > T< / span > < span class = "special" > ()< / span > < / code >
and < code class = "computeroutput" > < span class = "identifier" > T< / span > < span class = "special" > ::< / span > < span class = "identifier" > T< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span >
< span class = "keyword" > const< / span > < span class = "special" > & < / span >
< span class = "special" > )< / span > < / code > is called.
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2007-05-29 06:40:25 +00:00
< span class = "bold" > < strong > Exception Safety:< / strong > < / span > If both are initialized,
this operation has the exception safety guarantees of < code class = "computeroutput" > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "special" > & ,< / span > < span class = "identifier" > T< / span > < span class = "special" > & )< / span > < / code > .
If only one is initialized, it has the same basic guarantee as < code class = "computeroutput" > < span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > ::< / span > < span class = "identifier" > reset< / span > < span class = "special" > (< / span > < span class = "identifier" > T< / span > < span class = "keyword" > const< / span > < span class = "special" > & < / span > < span class = "special" > )< / span > < / code > .
< / li >
2009-11-20 10:26:23 +00:00
< li class = "listitem" >
2009-02-12 14:01:48 +00:00
< span class = "bold" > < strong > Example:< / strong > < / span > < pre class = "programlisting" > < span class = "identifier" > T< / span > < span class = "identifier" > x< / span > < span class = "special" > (< / span > < span class = "number" > 12< / span > < span class = "special" > );< / span >
2007-05-29 06:40:25 +00:00
< span class = "identifier" > T< / span > < span class = "identifier" > y< / span > < span class = "special" > (< / span > < span class = "number" > 21< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def0< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > def1< / span > < span class = "special" > ;< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optX< / span > < span class = "special" > (< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< span class = "identifier" > optional< / span > < span class = "special" > < < / span > < span class = "identifier" > T< / span > < span class = "special" > > < / span > < span class = "identifier" > optY< / span > < span class = "special" > (< / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span >
< span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ,< / span > < span class = "identifier" > def1< / span > < span class = "special" > );< / span > < span class = "comment" > // no-op
< / span >
< span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ,< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > def0< / span > < span class = "special" > ==< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > !< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span >
< span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > def0< / span > < span class = "special" > ,< / span > < span class = "identifier" > optX< / span > < span class = "special" > );< / span > < span class = "comment" > // Get back to original values
< / span >
< span class = "identifier" > boost< / span > < span class = "special" > ::< / span > < span class = "identifier" > swap< / span > < span class = "special" > (< / span > < span class = "identifier" > optX< / span > < span class = "special" > ,< / span > < span class = "identifier" > optY< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > optX< / span > < span class = "special" > ==< / span > < span class = "identifier" > y< / span > < span class = "special" > );< / span >
< span class = "identifier" > assert< / span > < span class = "special" > (< / span > < span class = "special" > *< / span > < span class = "identifier" > optY< / span > < span class = "special" > ==< / span > < span class = "identifier" > x< / span > < span class = "special" > );< / span >
< / pre >
< / li >
< / ul > < / div >
< / div >
< table xmlns:rev = "http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width = "100%" > < tr >
< td align = "left" > < / td >
2008-02-14 17:43:52 +00:00
< td align = "right" > < div class = "copyright-footer" > Copyright <20> 2003 -2007 Fernando Luis Cacciola Carballal< p >
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at < a href = "http://www.boost.org/LICENSE_1_0.txt" target = "_top" > http://www.boost.org/LICENSE_1_0.txt< / a > )
< / p >
< / div > < / td >
2007-05-29 06:40:25 +00:00
< / tr > < / table >
< hr >
< div class = "spirit-nav" >
2008-02-14 17:43:52 +00:00
< a accesskey = "p" href = "synopsis.html" > < img src = "../../../../../doc/html/images/prev.png" alt = "Prev" > < / a > < a accesskey = "u" href = "../index.html" > < img src = "../../../../../doc/html/images/up.png" alt = "Up" > < / a > < a accesskey = "h" href = "../index.html" > < img src = "../../../../../doc/html/images/home.png" alt = "Home" > < / a > < a accesskey = "n" href = "examples.html" > < img src = "../../../../../doc/html/images/next.png" alt = "Next" > < / a >
2007-05-29 06:40:25 +00:00
< / div >
< / body >
< / html >