constexpr optional() noexcept;
constexpr optional(nullopt_t) noexcept;
constexpr optional(const optional& rhs);
constexpr optional(optional&& rhs) noexcept(see below);
template <class... Args> constexpr explicit optional(in_place_t, Args&&... args);
template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U> il, Args&&... args);
template <class U = T> EXPLICIT constexpr optional(U&& v);
template <class U> EXPLICIT optional(const optional<U>& rhs);
template <class U> EXPLICIT optional(optional<U>&& rhs);