[#beman-optional-optional-06-2constructor-03] = xref:beman.adoc[beman]::xref:beman/optional.adoc[optional]::xref:beman/optional/optional-06.adoc[optional<T&>]::optional :relfileprefix: ../../../ :mrdocs: Constructors == Synopses Declared in `<beman/optional/optional.hpp>` Default constructor. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr xref:beman/optional/optional-06/2constructor-070.adoc[optional]() noexcept = default; ---- [.small]#xref:beman/optional/optional-06/2constructor-070.adoc[_» more..._]# Copy constructor. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr xref:beman/optional/optional-06/2constructor-0a3d.adoc[optional](xref:beman/optional/optional-06.adoc[optional] const& rhs) noexcept = default; ---- [.small]#xref:beman/optional/optional-06/2constructor-0a3d.adoc[_» more..._]# Constructs an empty optional. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr xref:beman/optional/optional-06/2constructor-008.adoc[optional](xref:beman/optional/nullopt_t.adoc[nullopt_t] value) noexcept; ---- [.small]#xref:beman/optional/optional-06/2constructor-008.adoc[_» more..._]# Constructs an optional from another optional of type U [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U&> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && detail::reference_constructs_from_temporary_v<T&, U&>) constexpr xref:beman/optional/optional-06/2constructor-01d.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>]& rhs) = delete; ---- [.small]#xref:beman/optional/optional-06/2constructor-01d.adoc[_» more..._]# Constructs an optional from another optional of type U. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U&> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && !detail::reference_constructs_from_temporary_v<T&, U&>) constexpr explicit(!std::is_convertible_v<U &, T &>) xref:beman/optional/optional-06/2constructor-0fa.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>]& rhs) noexcept(std::is_nothrow_constructible_v<T &, U &>); ---- [.small]#xref:beman/optional/optional-06/2constructor-0fa.adoc[_» more..._]# Constructs an optional from another optional of type U [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, const U&> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && detail::reference_constructs_from_temporary_v<T&, const U&>) constexpr xref:beman/optional/optional-06/2constructor-07d.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>] const& rhs) = delete; ---- [.small]#xref:beman/optional/optional-06/2constructor-07d.adoc[_» more..._]# Constructs an optional from another optional of type U. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, const U&> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && !detail::reference_constructs_from_temporary_v<T&, const U&>) constexpr explicit(!std::is_convertible_v<const U &, T &>) xref:beman/optional/optional-06/2constructor-0a31.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>] const& rhs) noexcept(std::is_nothrow_constructible_v<T &, const U &>); ---- [.small]#xref:beman/optional/optional-06/2constructor-0a31.adoc[_» more..._]# Construct from a U [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U> && !(std::is_same_v<std::remove_cvref_t<U>, in_place_t>) && !(std::is_same_v<std::remove_cvref_t<U>, optional>) && !detail::reference_constructs_from_temporary_v<T&, U>) constexpr explicit(!std::is_convertible_v<U, T &>) xref:beman/optional/optional-06/2constructor-01a.adoc[optional](U&& u) noexcept(std::is_nothrow_constructible_v<T &, U>); ---- [.small]#xref:beman/optional/optional-06/2constructor-01a.adoc[_» more..._]# Constructs an optional from a U, but deletes the constructor if [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U> && !(std::is_same_v<std::remove_cvref_t<U>, in_place_t>) && !(std::is_same_v<std::remove_cvref_t<U>, optional>) && detail::reference_constructs_from_temporary_v<T&, U>) constexpr xref:beman/optional/optional-06/2constructor-004.adoc[optional](U&& u) = delete; ---- [.small]#xref:beman/optional/optional-06/2constructor-004.adoc[_» more..._]# Constructs an optional from another optional of type U [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && detail::reference_constructs_from_temporary_v<T&, U>) constexpr xref:beman/optional/optional-06/2constructor-0a36.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>]&& rhs) = delete; ---- [.small]#xref:beman/optional/optional-06/2constructor-0a36.adoc[_» more..._]# Constructs an optional from another optional of type U. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, U> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && !detail::reference_constructs_from_temporary_v<T&, U>) constexpr explicit(!std::is_convertible_v<U, T &>) xref:beman/optional/optional-06/2constructor-08.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>]&& rhs) noexcept(noexcept(std::is_nothrow_constructible_v<T &, U>)); ---- [.small]#xref:beman/optional/optional-06/2constructor-08.adoc[_» more..._]# Constructs an optional from another optional of type U [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, const U> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && detail::reference_constructs_from_temporary_v<T&, const U>) constexpr xref:beman/optional/optional-06/2constructor-04.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>] const&& rhs) = delete; ---- [.small]#xref:beman/optional/optional-06/2constructor-04.adoc[_» more..._]# Constructs an optional from another optional of type U. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class U> requires (std::is_constructible_v<T&, const U> && !std::is_same_v<std::remove_cv_t<T>, optional<U>> && !std::is_same_v<T&, U> && !detail::reference_constructs_from_temporary_v<T&, const U>) constexpr explicit(!std::is_convertible_v<const U, T &>) xref:beman/optional/optional-06/2constructor-05.adoc[optional](xref:beman/optional/optional-03.adoc[optional<U>] const&& rhs) noexcept(noexcept(std::is_nothrow_constructible_v<T &, const U>)); ---- [.small]#xref:beman/optional/optional-06/2constructor-05.adoc[_» more..._]# In‐place constructor. [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class Arg> requires (std::is_constructible_v<T&, Arg> && !detail::reference_constructs_from_temporary_v<T&, Arg>) constexpr explicit xref:beman/optional/optional-06/2constructor-0f8.adoc[optional]( xref:beman/optional/in_place_t.adoc[in_place_t], Arg&& arg); ---- [.small]#xref:beman/optional/optional-06/2constructor-0f8.adoc[_» more..._]# [.small]#Created with https://www.mrdocs.com[MrDocs]#