29    using unexpected_type = std::unexpected<E>;
 
   34    constexpr expected(
const U &v) : v_(v) { }
 
   36    constexpr expected(U &&v) : v_(std::move(v)) { }
 
   41    template <
class ... Args>
 
   42    constexpr explicit expected(
unexpect_t,Args &&...args) : v_(std::in_place_t<E>,args...) { }
 
   44    constexpr const T *operator->()
 const { 
return &std::get<0>(v_); }
 
   45    constexpr       T *operator->() { 
return &std::get<0>(v_); }
 
   46    constexpr const T &operator*()
 const { 
return std::get<0>(v_); }
 
   47    constexpr       T &operator*() { 
return std::get<0>(v_); }
 
   48    constexpr bool     has_value()
 const { 
return v_.index()==0; }
 
   49    constexpr operator bool()
 const { 
return has_value(); }
 
   50    constexpr const T &value()
 const { 
return std::get<0>(v_); }
 
   51    constexpr T &&     value() { 
return std::get<0>(v_); }
 
   52    constexpr const E &error()
 const { 
return std::get<1>(v_); }
 
   53    constexpr E &&     error() { 
return std::get<1>(v_); }
 
   54    constexpr T        value_or(T &&default_value)
 const { 
return has_value() ? value() : default_value; }
 
   57    constexpr auto and_then(F &&f) { 
if (has_value()) 
return std::invoke(std::forward<F>(f),**
this); 
else return *
this; }
 
   60    constexpr auto or_else(F &&f) { 
if (has_value()) 
return *
this; 
else return std::invoke(std::forward<F>(f),error()); }