cpp/utility/optional/optional

Constructs a new optional object.

@1@ Constructs an object that does not contain a value.

@2@ Copy constructor: If contains a value, initializes the contained value as if direct-initializing (but not direct-list-initializing) an object of type  with the expression. If does not contain a value, constructs an object that does not contain a value.
 * This constructor is defined as deleted if is.
 * It is a trivial constructor if is.

@3@ Move constructor: If contains a value, initializes the contained value as if direct-initializing (but not direct-list-initializing) an object of type  with the expression  and does not make  empty: a moved-from  still contains a value, but the value itself is moved from. If does not contain a value, constructs an object that does not contain a value.
 * This constructor does not participate in overload resolution unless is.
 * It is a trivial constructor if is.

@4@ Converting copy constructor: If does not contain a value, constructs an optional object that does not contain a value. Otherwise, constructs an optional object that contains a value, initialized as if direct-initializing (but not direct-list-initializing) an object of type with the expression.
 * This constructor does not participate in overload resolution unless the following conditions are met:
 * is.
 * If is not (possibly cv-qualified),  is not constructible or convertible from any expression of type (possibly ) , i.e., the following 8 values are all :
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.

@5@ Converting move constructor: If does not contain a value, constructs an optional object that does not contain a value. Otherwise, constructs an optional object that contains a value, initialized as if direct-initializing (but not direct-list-initializing) an object of type with the expression.
 * This constructor does not participate in overload resolution unless the following conditions are met:
 * is.
 * If is not (possibly cv-qualified),  is not constructible or convertible from any expression of type (possibly ) , i.e., the following 8 values are all :
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.
 * This constructor is if and only if  is.

@6@ Constructs an optional object that contains a value, initialized as if direct-initializing (but not direct-list-initializing) an object of type from the arguments.
 * If the selected constructor of is a  constructor, this constructor is a  constructor.
 * The function does not participate in the overload resolution unless is.

@7@ Constructs an optional object that contains a value, initialized as if direct-initializing (but not direct-list-initializing) an object of type from the arguments.
 * If the selected constructor of is a  constructor, this constructor is a  constructor.
 * The function does not participate in the overload resolution unless is.

@8@ Constructs an optional object that contains a value, initialized as if direct-initializing (but not direct-list-initializing) an object of type  with the expression.
 * If the selected constructor of is a  constructor, this constructor is a  constructor.
 * This constructor does not participate in overload resolution unless the following conditions are met:
 * is.
 * is neither std nor.
 * If is (possibly cv-qualified),  is not a specialization of.
 * This constructor is if and only if  is.

Exceptions
@2@ Throws any exception thrown by the constructor of.

@3@ Throws any exception thrown by the constructor of. Has the following

@4-8@ Throws any exception thrown by the constructor of.