diff --git a/upstream_utils/expected.py b/upstream_utils/expected.py index bec2a366e6..cfa323c44c 100755 --- a/upstream_utils/expected.py +++ b/upstream_utils/expected.py @@ -15,12 +15,14 @@ def copy_upstream_src(wpilib_root): ) shutil.copyfile("include/tl/expected.hpp", dest_filename) - # Rename namespace from tl to wpi + # Rename namespace from tl to wpi, and detail to detail_expected with open(dest_filename) as f: content = f.read() content = content.replace("namespace tl", "namespace wpi") content = content.replace("tl::", "wpi::") content = content.replace("TL_", "WPI_") + content = content.replace("namespace detail", "namespace detail_expected") + content = content.replace("detail::", "detail_expected::") with open(dest_filename, "w") as f: f.write(content) diff --git a/wpiutil/src/main/native/thirdparty/expected/include/wpi/expected b/wpiutil/src/main/native/thirdparty/expected/include/wpi/expected index 67420e6b0d..24b7a26ec7 100644 --- a/wpiutil/src/main/native/thirdparty/expected/include/wpi/expected +++ b/wpiutil/src/main/native/thirdparty/expected/include/wpi/expected @@ -82,7 +82,7 @@ #ifndef WPI_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX #define WPI_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX namespace wpi { -namespace detail { +namespace detail_expected { template struct is_trivially_copy_constructible : std::is_trivially_copy_constructible {}; @@ -90,12 +90,12 @@ struct is_trivially_copy_constructible template struct is_trivially_copy_constructible> : std::false_type {}; #endif -} // namespace detail +} // namespace detail_expected } // namespace wpi #endif #define WPI_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) \ - wpi::detail::is_trivially_copy_constructible + wpi::detail_expected::is_trivially_copy_constructible #define WPI_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T) \ std::is_trivially_copy_assignable #define WPI_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T) \ @@ -207,7 +207,7 @@ struct unexpect_t { }; static constexpr unexpect_t unexpect{}; -namespace detail { +namespace detail_expected { template [[noreturn]] WPI_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) { #ifdef WPI_EXPECTED_EXCEPTIONS_ENABLED @@ -304,10 +304,10 @@ template struct invoke_result_impl; template struct invoke_result_impl< F, - decltype(detail::invoke(std::declval(), std::declval()...), void()), + decltype(detail_expected::invoke(std::declval(), std::declval()...), void()), Us...> { using type = - decltype(detail::invoke(std::declval(), std::declval()...)); + decltype(detail_expected::invoke(std::declval(), std::declval()...)); }; template @@ -362,8 +362,8 @@ template struct is_swappable : std::integral_constant< bool, - decltype(detail::swap_adl_tests::can_swap(0))::value && - (!decltype(detail::swap_adl_tests::uses_std(0))::value || + decltype(detail_expected::swap_adl_tests::can_swap(0))::value && + (!decltype(detail_expected::swap_adl_tests::uses_std(0))::value || (std::is_move_assignable::value && std::is_move_constructible::value))> {}; @@ -371,8 +371,8 @@ template struct is_swappable : std::integral_constant< bool, - decltype(detail::swap_adl_tests::can_swap(0))::value && - (!decltype(detail::swap_adl_tests::uses_std( + decltype(detail_expected::swap_adl_tests::can_swap(0))::value && + (!decltype(detail_expected::swap_adl_tests::uses_std( 0))::value || is_swappable::value)> {}; @@ -381,10 +381,10 @@ struct is_nothrow_swappable : std::integral_constant< bool, is_swappable::value && - ((decltype(detail::swap_adl_tests::uses_std(0))::value && - detail::swap_adl_tests::is_std_swap_noexcept::value) || - (!decltype(detail::swap_adl_tests::uses_std(0))::value && - detail::swap_adl_tests::is_adl_swap_noexcept::value))> {}; + ((decltype(detail_expected::swap_adl_tests::uses_std(0))::value && + detail_expected::swap_adl_tests::is_std_swap_noexcept::value) || + (!decltype(detail_expected::swap_adl_tests::uses_std(0))::value && + detail_expected::swap_adl_tests::is_adl_swap_noexcept::value))> {}; #endif #endif @@ -395,14 +395,14 @@ struct is_expected_impl> : std::true_type {}; template using is_expected = is_expected_impl>; template -using expected_enable_forward_value = detail::enable_if_t< +using expected_enable_forward_value = detail_expected::enable_if_t< std::is_constructible::value && - !std::is_same, in_place_t>::value && - !std::is_same, detail::decay_t>::value && - !std::is_same, detail::decay_t>::value>; + !std::is_same, in_place_t>::value && + !std::is_same, detail_expected::decay_t>::value && + !std::is_same, detail_expected::decay_t>::value>; template -using expected_enable_from_other = detail::enable_if_t< +using expected_enable_from_other = detail_expected::enable_if_t< std::is_constructible::value && std::is_constructible::value && !std::is_constructible &>::value && @@ -431,9 +431,9 @@ using is_copy_assignable_or_void = is_void_or>; template using is_move_assignable_or_void = is_void_or>; -} // namespace detail +} // namespace detail_expected -namespace detail { +namespace detail_expected { struct no_init_t {}; static constexpr no_init_t no_init{}; @@ -450,25 +450,25 @@ struct expected_storage_base { constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr expected_storage_base(in_place_t, Args &&...args) : m_val(std::forward(args)...), m_has_val(true) {} template &, Args &&...>::value> * = nullptr> constexpr expected_storage_base(in_place_t, std::initializer_list il, Args &&...args) : m_val(il, std::forward(args)...), m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -497,25 +497,25 @@ template struct expected_storage_base { constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr expected_storage_base(in_place_t, Args &&...args) : m_val(std::forward(args)...), m_has_val(true) {} template &, Args &&...>::value> * = nullptr> constexpr expected_storage_base(in_place_t, std::initializer_list il, Args &&...args) : m_val(il, std::forward(args)...), m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -538,25 +538,25 @@ template struct expected_storage_base { : m_no_init(), m_has_val(false) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr expected_storage_base(in_place_t, Args &&...args) : m_val(std::forward(args)...), m_has_val(true) {} template &, Args &&...>::value> * = nullptr> constexpr expected_storage_base(in_place_t, std::initializer_list il, Args &&...args) : m_val(il, std::forward(args)...), m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -583,25 +583,25 @@ template struct expected_storage_base { constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr expected_storage_base(in_place_t, Args &&...args) : m_val(std::forward(args)...), m_has_val(true) {} template &, Args &&...>::value> * = nullptr> constexpr expected_storage_base(in_place_t, std::initializer_list il, Args &&...args) : m_val(il, std::forward(args)...), m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -635,13 +635,13 @@ template struct expected_storage_base { constexpr expected_storage_base(in_place_t) : m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -665,13 +665,13 @@ template struct expected_storage_base { constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val(true) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, Args &&...args) : m_unexpect(std::forward(args)...), m_has_val(false) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected_storage_base(unexpect_t, std::initializer_list il, @@ -722,7 +722,7 @@ struct expected_operations_base : expected_storage_base { // This overload handles the case where we can just copy-construct `T` // directly into place without throwing. template ::value> + detail_expected::enable_if_t::value> * = nullptr> void assign(const expected_operations_base &rhs) noexcept { if (!this->m_has_val && rhs.m_has_val) { @@ -736,7 +736,7 @@ struct expected_operations_base : expected_storage_base { // This overload handles the case where we can attempt to create a copy of // `T`, then no-throw move it into place if the copy was successful. template ::value && + detail_expected::enable_if_t::value && std::is_nothrow_move_constructible::value> * = nullptr> void assign(const expected_operations_base &rhs) noexcept { @@ -755,7 +755,7 @@ struct expected_operations_base : expected_storage_base { // then we move the old unexpected value back into place before rethrowing the // exception. template ::value && + detail_expected::enable_if_t::value && !std::is_nothrow_move_constructible::value> * = nullptr> void assign(const expected_operations_base &rhs) { @@ -780,7 +780,7 @@ struct expected_operations_base : expected_storage_base { // These overloads do the same as above, but for rvalues template ::value> + detail_expected::enable_if_t::value> * = nullptr> void assign(expected_operations_base &&rhs) noexcept { if (!this->m_has_val && rhs.m_has_val) { @@ -792,7 +792,7 @@ struct expected_operations_base : expected_storage_base { } template ::value> + detail_expected::enable_if_t::value> * = nullptr> void assign(expected_operations_base &&rhs) { if (!this->m_has_val && rhs.m_has_val) { @@ -1217,7 +1217,7 @@ template struct expected_default_ctor_base { constexpr explicit expected_default_ctor_base(default_constructor_tag) {} }; -} // namespace detail +} // namespace detail_expected template class bad_expected_access : public std::exception { public: @@ -1244,10 +1244,10 @@ private: /// has been destroyed. The initialization state of the contained object is /// tracked by the expected object. template -class expected : private detail::expected_move_assign_base, - private detail::expected_delete_ctor_base, - private detail::expected_delete_assign_base, - private detail::expected_default_ctor_base { +class expected : private detail_expected::expected_move_assign_base, + private detail_expected::expected_delete_ctor_base, + private detail_expected::expected_delete_assign_base, + private detail_expected::expected_default_ctor_base { static_assert(!std::is_reference::value, "T must not be a reference"); static_assert(!std::is_same::type>::value, "T must not be in_place_t"); @@ -1266,21 +1266,21 @@ class expected : private detail::expected_move_assign_base, } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR U &val() { return this->m_val; } WPI_EXPECTED_11_CONSTEXPR unexpected &err() { return this->m_unexpect; } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr const U &val() const { return this->m_val; } constexpr const unexpected &err() const { return this->m_unexpect; } - using impl_base = detail::expected_move_assign_base; - using ctor_base = detail::expected_default_ctor_base; + using impl_base = detail_expected::expected_move_assign_base; + using ctor_base = detail_expected::expected_default_ctor_base; public: typedef T value_type; @@ -1531,78 +1531,78 @@ public: expected &operator=(expected &&rhs) = default; template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr expected(in_place_t, Args &&...args) : impl_base(in_place, std::forward(args)...), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template &, Args &&...>::value> * = nullptr> constexpr expected(in_place_t, std::initializer_list il, Args &&...args) : impl_base(in_place, il, std::forward(args)...), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = + detail_expected::enable_if_t::value> * = nullptr> explicit constexpr expected(const unexpected &e) : impl_base(unexpect, e.value()), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template < class G = E, - detail::enable_if_t::value> * = + detail_expected::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr expected(unexpected const &e) : impl_base(unexpect, e.value()), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template < class G = E, - detail::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::enable_if_t::value> * = nullptr> explicit constexpr expected(unexpected &&e) noexcept( std::is_nothrow_constructible::value) : impl_base(unexpect, std::move(e.value())), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template < class G = E, - detail::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::enable_if_t::value> * = nullptr> constexpr expected(unexpected &&e) noexcept( std::is_nothrow_constructible::value) : impl_base(unexpect, std::move(e.value())), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template ::value> * = + detail_expected::enable_if_t::value> * = nullptr> constexpr explicit expected(unexpect_t, Args &&...args) : impl_base(unexpect, std::forward(args)...), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template &, Args &&...>::value> * = nullptr> constexpr explicit expected(unexpect_t, std::initializer_list il, Args &&...args) : impl_base(unexpect, il, std::forward(args)...), - ctor_base(detail::default_constructor_tag{}) {} + ctor_base(detail_expected::default_constructor_tag{}) {} template ::value && + detail_expected::enable_if_t::value && std::is_convertible::value)> * = nullptr, - detail::expected_enable_from_other + detail_expected::expected_enable_from_other * = nullptr> explicit WPI_EXPECTED_11_CONSTEXPR expected(const expected &rhs) - : ctor_base(detail::default_constructor_tag{}) { + : ctor_base(detail_expected::default_constructor_tag{}) { if (rhs.has_value()) { this->construct(*rhs); } else { @@ -1611,13 +1611,13 @@ public: } template ::value && + detail_expected::enable_if_t<(std::is_convertible::value && std::is_convertible::value)> * = nullptr, - detail::expected_enable_from_other + detail_expected::expected_enable_from_other * = nullptr> WPI_EXPECTED_11_CONSTEXPR expected(const expected &rhs) - : ctor_base(detail::default_constructor_tag{}) { + : ctor_base(detail_expected::default_constructor_tag{}) { if (rhs.has_value()) { this->construct(*rhs); } else { @@ -1627,11 +1627,11 @@ public: template < class U, class G, - detail::enable_if_t::value && + detail_expected::enable_if_t::value && std::is_convertible::value)> * = nullptr, - detail::expected_enable_from_other * = nullptr> + detail_expected::expected_enable_from_other * = nullptr> explicit WPI_EXPECTED_11_CONSTEXPR expected(expected &&rhs) - : ctor_base(detail::default_constructor_tag{}) { + : ctor_base(detail_expected::default_constructor_tag{}) { if (rhs.has_value()) { this->construct(std::move(*rhs)); } else { @@ -1641,11 +1641,11 @@ public: template < class U, class G, - detail::enable_if_t<(std::is_convertible::value && + detail_expected::enable_if_t<(std::is_convertible::value && std::is_convertible::value)> * = nullptr, - detail::expected_enable_from_other * = nullptr> + detail_expected::expected_enable_from_other * = nullptr> WPI_EXPECTED_11_CONSTEXPR expected(expected &&rhs) - : ctor_base(detail::default_constructor_tag{}) { + : ctor_base(detail_expected::default_constructor_tag{}) { if (rhs.has_value()) { this->construct(std::move(*rhs)); } else { @@ -1655,27 +1655,27 @@ public: template < class U = T, - detail::enable_if_t::value> * = nullptr, - detail::expected_enable_forward_value * = nullptr> + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::expected_enable_forward_value * = nullptr> explicit WPI_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v) : expected(in_place, std::forward(v)) {} template < class U = T, - detail::enable_if_t::value> * = nullptr, - detail::expected_enable_forward_value * = nullptr> + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::expected_enable_forward_value * = nullptr> WPI_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v) : expected(in_place, std::forward(v)) {} template < class U = T, class G = T, - detail::enable_if_t::value> * = + detail_expected::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = nullptr, - detail::enable_if_t< - (!std::is_same, detail::decay_t>::value && - !detail::conjunction, - std::is_same>>::value && + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::enable_if_t< + (!std::is_same, detail_expected::decay_t>::value && + !detail_expected::conjunction, + std::is_same>>::value && std::is_constructible::value && std::is_assignable::value && std::is_nothrow_move_constructible::value)> * = nullptr> @@ -1693,13 +1693,13 @@ public: template < class U = T, class G = T, - detail::enable_if_t::value> * = + detail_expected::enable_if_t::value> * = nullptr, - detail::enable_if_t::value> * = nullptr, - detail::enable_if_t< - (!std::is_same, detail::decay_t>::value && - !detail::conjunction, - std::is_same>>::value && + detail_expected::enable_if_t::value> * = nullptr, + detail_expected::enable_if_t< + (!std::is_same, detail_expected::decay_t>::value && + !detail_expected::conjunction, + std::is_same>>::value && std::is_constructible::value && std::is_assignable::value && std::is_nothrow_move_constructible::value)> * = nullptr> @@ -1728,7 +1728,7 @@ public: } template ::value && + detail_expected::enable_if_t::value && std::is_assignable::value> * = nullptr> expected &operator=(const unexpected &rhs) { if (!has_value()) { @@ -1743,7 +1743,7 @@ public: } template ::value && + detail_expected::enable_if_t::value && std::is_move_assignable::value> * = nullptr> expected &operator=(unexpected &&rhs) noexcept { if (!has_value()) { @@ -1757,7 +1757,7 @@ public: return *this; } - template ::value> * = nullptr> void emplace(Args &&...args) { if (has_value()) { @@ -1769,7 +1769,7 @@ public: ::new (valptr()) T(std::forward(args)...); } - template ::value> * = nullptr> void emplace(Args &&...args) { if (has_value()) { @@ -1795,7 +1795,7 @@ public: } template &, Args &&...>::value> * = nullptr> void emplace(std::initializer_list il, Args &&...args) { if (has_value()) { @@ -1809,7 +1809,7 @@ public: } template &, Args &&...>::value> * = nullptr> void emplace(std::initializer_list il, Args &&...args) { if (has_value()) { @@ -1923,15 +1923,15 @@ private: public: template - detail::enable_if_t::value && - detail::is_swappable::value && + detail_expected::enable_if_t::value && + detail_expected::is_swappable::value && (std::is_nothrow_move_constructible::value || std::is_nothrow_move_constructible::value)> swap(expected &rhs) noexcept( std::is_nothrow_move_constructible::value - &&detail::is_nothrow_swappable::value + &&detail_expected::is_nothrow_swappable::value &&std::is_nothrow_move_constructible::value - &&detail::is_nothrow_swappable::value) { + &&detail_expected::is_nothrow_swappable::value) { if (has_value() && rhs.has_value()) { swap_where_both_have_value(rhs, typename std::is_void::type{}); } else if (!has_value() && rhs.has_value()) { @@ -1954,25 +1954,25 @@ public: } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr const U &operator*() const & { WPI_ASSERT(has_value()); return val(); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR U &operator*() & { WPI_ASSERT(has_value()); return val(); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr const U &&operator*() const && { WPI_ASSERT(has_value()); return std::move(val()); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR U &&operator*() && { WPI_ASSERT(has_value()); return std::move(val()); @@ -1982,31 +1982,31 @@ public: constexpr explicit operator bool() const noexcept { return this->m_has_val; } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR const U &value() const & { if (!has_value()) - detail::throw_exception(bad_expected_access(err().value())); + detail_expected::throw_exception(bad_expected_access(err().value())); return val(); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR U &value() & { if (!has_value()) - detail::throw_exception(bad_expected_access(err().value())); + detail_expected::throw_exception(bad_expected_access(err().value())); return val(); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR const U &&value() const && { if (!has_value()) - detail::throw_exception(bad_expected_access(std::move(err()).value())); + detail_expected::throw_exception(bad_expected_access(std::move(err()).value())); return std::move(val()); } template ::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> WPI_EXPECTED_11_CONSTEXPR U &&value() && { if (!has_value()) - detail::throw_exception(bad_expected_access(std::move(err()).value())); + detail_expected::throw_exception(bad_expected_access(std::move(err()).value())); return std::move(val()); } @@ -2041,80 +2041,80 @@ public: } }; -namespace detail { -template using exp_t = typename detail::decay_t::value_type; -template using err_t = typename detail::decay_t::error_type; +namespace detail_expected { +template using exp_t = typename detail_expected::decay_t::value_type; +template using err_t = typename detail_expected::decay_t::error_type; template using ret_t = expected>; #ifdef WPI_EXPECTED_CXX14 template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval()))> constexpr auto and_then_impl(Exp &&exp, F &&f) { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); return exp.has_value() - ? detail::invoke(std::forward(f), *std::forward(exp)) + ? detail_expected::invoke(std::forward(f), *std::forward(exp)) : Ret(unexpect, std::forward(exp).error()); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval()))> + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval()))> constexpr auto and_then_impl(Exp &&exp, F &&f) { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); - return exp.has_value() ? detail::invoke(std::forward(f)) + return exp.has_value() ? detail_expected::invoke(std::forward(f)) : Ret(unexpect, std::forward(exp).error()); } #else template struct TC; template (), + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval())), - detail::enable_if_t>::value> * = nullptr> + detail_expected::enable_if_t>::value> * = nullptr> auto and_then_impl(Exp &&exp, F &&f) -> Ret { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); return exp.has_value() - ? detail::invoke(std::forward(f), *std::forward(exp)) + ? detail_expected::invoke(std::forward(f), *std::forward(exp)) : Ret(unexpect, std::forward(exp).error()); } template ())), - detail::enable_if_t>::value> * = nullptr> + class Ret = decltype(detail_expected::invoke(std::declval())), + detail_expected::enable_if_t>::value> * = nullptr> constexpr auto and_then_impl(Exp &&exp, F &&f) -> Ret { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); - return exp.has_value() ? detail::invoke(std::forward(f)) + return exp.has_value() ? detail_expected::invoke(std::forward(f)) : Ret(unexpect, std::forward(exp).error()); } #endif #ifdef WPI_EXPECTED_CXX14 template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto expected_map_impl(Exp &&exp, F &&f) { - using result = ret_t>; - return exp.has_value() ? result(detail::invoke(std::forward(f), + using result = ret_t>; + return exp.has_value() ? result(detail_expected::invoke(std::forward(f), *std::forward(exp))) : result(unexpect, std::forward(exp).error()); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto expected_map_impl(Exp &&exp, F &&f) { using result = expected>; if (exp.has_value()) { - detail::invoke(std::forward(f), *std::forward(exp)); + detail_expected::invoke(std::forward(f), *std::forward(exp)); return result(); } @@ -2122,23 +2122,23 @@ auto expected_map_impl(Exp &&exp, F &&f) { } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval())), + detail_expected::enable_if_t::value> * = nullptr> constexpr auto expected_map_impl(Exp &&exp, F &&f) { - using result = ret_t>; - return exp.has_value() ? result(detail::invoke(std::forward(f))) + using result = ret_t>; + return exp.has_value() ? result(detail_expected::invoke(std::forward(f))) : result(unexpect, std::forward(exp).error()); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval())), + detail_expected::enable_if_t::value> * = nullptr> auto expected_map_impl(Exp &&exp, F &&f) { using result = expected>; if (exp.has_value()) { - detail::invoke(std::forward(f)); + detail_expected::invoke(std::forward(f)); return result(); } @@ -2146,29 +2146,29 @@ auto expected_map_impl(Exp &&exp, F &&f) { } #else template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto expected_map_impl(Exp &&exp, F &&f) - -> ret_t> { - using result = ret_t>; + -> ret_t> { + using result = ret_t>; - return exp.has_value() ? result(detail::invoke(std::forward(f), + return exp.has_value() ? result(detail_expected::invoke(std::forward(f), *std::forward(exp))) : result(unexpect, std::forward(exp).error()); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), *std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto expected_map_impl(Exp &&exp, F &&f) -> expected> { if (exp.has_value()) { - detail::invoke(std::forward(f), *std::forward(exp)); + detail_expected::invoke(std::forward(f), *std::forward(exp)); return {}; } @@ -2176,26 +2176,26 @@ auto expected_map_impl(Exp &&exp, F &&f) -> expected> { } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval())), + detail_expected::enable_if_t::value> * = nullptr> constexpr auto expected_map_impl(Exp &&exp, F &&f) - -> ret_t> { - using result = ret_t>; + -> ret_t> { + using result = ret_t>; - return exp.has_value() ? result(detail::invoke(std::forward(f))) + return exp.has_value() ? result(detail_expected::invoke(std::forward(f))) : result(unexpect, std::forward(exp).error()); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval())), + detail_expected::enable_if_t::value> * = nullptr> auto expected_map_impl(Exp &&exp, F &&f) -> expected> { if (exp.has_value()) { - detail::invoke(std::forward(f)); + detail_expected::invoke(std::forward(f)); return {}; } @@ -2206,165 +2206,165 @@ auto expected_map_impl(Exp &&exp, F &&f) -> expected> { #if defined(WPI_EXPECTED_CXX14) && !defined(WPI_EXPECTED_GCC49) && \ !defined(WPI_EXPECTED_GCC54) && !defined(WPI_EXPECTED_GCC55) template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto map_error_impl(Exp &&exp, F &&f) { - using result = expected, detail::decay_t>; + using result = expected, detail_expected::decay_t>; return exp.has_value() ? result(*std::forward(exp)) - : result(unexpect, detail::invoke(std::forward(f), + : result(unexpect, detail_expected::invoke(std::forward(f), std::forward(exp).error())); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto map_error_impl(Exp &&exp, F &&f) { using result = expected, monostate>; if (exp.has_value()) { return result(*std::forward(exp)); } - detail::invoke(std::forward(f), std::forward(exp).error()); + detail_expected::invoke(std::forward(f), std::forward(exp).error()); return result(unexpect, monostate{}); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto map_error_impl(Exp &&exp, F &&f) { - using result = expected, detail::decay_t>; + using result = expected, detail_expected::decay_t>; return exp.has_value() ? result() - : result(unexpect, detail::invoke(std::forward(f), + : result(unexpect, detail_expected::invoke(std::forward(f), std::forward(exp).error())); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto map_error_impl(Exp &&exp, F &&f) { using result = expected, monostate>; if (exp.has_value()) { return result(); } - detail::invoke(std::forward(f), std::forward(exp).error()); + detail_expected::invoke(std::forward(f), std::forward(exp).error()); return result(unexpect, monostate{}); } #else template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto map_error_impl(Exp &&exp, F &&f) - -> expected, detail::decay_t> { - using result = expected, detail::decay_t>; + -> expected, detail_expected::decay_t> { + using result = expected, detail_expected::decay_t>; return exp.has_value() ? result(*std::forward(exp)) - : result(unexpect, detail::invoke(std::forward(f), + : result(unexpect, detail_expected::invoke(std::forward(f), std::forward(exp).error())); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto map_error_impl(Exp &&exp, F &&f) -> expected, monostate> { using result = expected, monostate>; if (exp.has_value()) { return result(*std::forward(exp)); } - detail::invoke(std::forward(f), std::forward(exp).error()); + detail_expected::invoke(std::forward(f), std::forward(exp).error()); return result(unexpect, monostate{}); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto map_error_impl(Exp &&exp, F &&f) - -> expected, detail::decay_t> { - using result = expected, detail::decay_t>; + -> expected, detail_expected::decay_t> { + using result = expected, detail_expected::decay_t>; return exp.has_value() ? result() - : result(unexpect, detail::invoke(std::forward(f), + : result(unexpect, detail_expected::invoke(std::forward(f), std::forward(exp).error())); } template >::value> * = nullptr, - class Ret = decltype(detail::invoke(std::declval(), + detail_expected::enable_if_t>::value> * = nullptr, + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto map_error_impl(Exp &&exp, F &&f) -> expected, monostate> { using result = expected, monostate>; if (exp.has_value()) { return result(); } - detail::invoke(std::forward(f), std::forward(exp).error()); + detail_expected::invoke(std::forward(f), std::forward(exp).error()); return result(unexpect, monostate{}); } #endif #ifdef WPI_EXPECTED_CXX14 template (), + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> constexpr auto or_else_impl(Exp &&exp, F &&f) { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); return exp.has_value() ? std::forward(exp) - : detail::invoke(std::forward(f), + : detail_expected::invoke(std::forward(f), std::forward(exp).error()); } template (), + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> -detail::decay_t or_else_impl(Exp &&exp, F &&f) { + detail_expected::enable_if_t::value> * = nullptr> +detail_expected::decay_t or_else_impl(Exp &&exp, F &&f) { return exp.has_value() ? std::forward(exp) - : (detail::invoke(std::forward(f), + : (detail_expected::invoke(std::forward(f), std::forward(exp).error()), std::forward(exp)); } #else template (), + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> + detail_expected::enable_if_t::value> * = nullptr> auto or_else_impl(Exp &&exp, F &&f) -> Ret { - static_assert(detail::is_expected::value, "F must return an expected"); + static_assert(detail_expected::is_expected::value, "F must return an expected"); return exp.has_value() ? std::forward(exp) - : detail::invoke(std::forward(f), + : detail_expected::invoke(std::forward(f), std::forward(exp).error()); } template (), + class Ret = decltype(detail_expected::invoke(std::declval(), std::declval().error())), - detail::enable_if_t::value> * = nullptr> -detail::decay_t or_else_impl(Exp &&exp, F &&f) { + detail_expected::enable_if_t::value> * = nullptr> +detail_expected::decay_t or_else_impl(Exp &&exp, F &&f) { return exp.has_value() ? std::forward(exp) - : (detail::invoke(std::forward(f), + : (detail_expected::invoke(std::forward(f), std::forward(exp).error()), std::forward(exp)); } #endif -} // namespace detail +} // namespace detail_expected template constexpr bool operator==(const expected &lhs, @@ -2430,11 +2430,11 @@ constexpr bool operator!=(const unexpected &e, const expected &x) { } template ::value || + detail_expected::enable_if_t<(std::is_void::value || std::is_move_constructible::value) && - detail::is_swappable::value && + detail_expected::is_swappable::value && std::is_move_constructible::value && - detail::is_swappable::value> * = nullptr> + detail_expected::is_swappable::value> * = nullptr> void swap(expected &lhs, expected &rhs) noexcept(noexcept(lhs.swap(rhs))) { lhs.swap(rhs);