| 1747 | |
| 1748 | template <class E> |
| 1749 | class unexpected { |
| 1750 | public: |
| 1751 | static_assert(!std::is_same<E, void>::value, "E must not be void"); |
| 1752 | |
| 1753 | unexpected() = delete; |
| 1754 | constexpr explicit unexpected(const E &e) : m_val(e) {} |
| 1755 | |
| 1756 | constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {} |
| 1757 | |
| 1758 | template <class... Args, typename std::enable_if<std::is_constructible< |
| 1759 | E, Args &&...>::value>::type * = nullptr> |
| 1760 | constexpr explicit unexpected(Args &&...args) |
| 1761 | : m_val(std::forward<Args>(args)...) {} |
| 1762 | template < |
| 1763 | class U, class... Args, |
| 1764 | typename std::enable_if<std::is_constructible< |
| 1765 | E, std::initializer_list<U> &, Args &&...>::value>::type * = nullptr> |
| 1766 | constexpr explicit unexpected(std::initializer_list<U> l, Args &&...args) |
| 1767 | : m_val(l, std::forward<Args>(args)...) {} |
| 1768 | |
| 1769 | constexpr const E &value() const & { return m_val; } |
| 1770 | TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; } |
| 1771 | TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); } |
| 1772 | constexpr const E &&value() const && { return std::move(m_val); } |
| 1773 | |
| 1774 | private: |
| 1775 | E m_val; |
| 1776 | }; |
| 1777 | |
| 1778 | #ifdef __cpp_deduction_guides |
| 1779 | template <class E> |
no outgoing calls
no test coverage detected