Lines Matching defs:detail
1853 namespace detail {
1861 } // namespace detail
1866 tl::detail::is_trivially_copy_constructible<T>
1981 namespace detail {
2086 decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...), void()),
2089 decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...));
2150 decltype(detail::swap_adl_tests::can_swap<T, U>(0))::value &&
2151 (!decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value ||
2159 decltype(detail::swap_adl_tests::can_swap<T[N], T[N]>(0))::value &&
2160 (!decltype(detail::swap_adl_tests::uses_std<T[N], T[N]>(
2169 ((decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value &&
2170 detail::swap_adl_tests::is_std_swap_noexcept<T>::value) ||
2171 (!decltype(detail::swap_adl_tests::uses_std<T, U>(0))::value &&
2172 detail::swap_adl_tests::is_adl_swap_noexcept<T, U>::value))> {};
2185 using expected_enable_forward_value = detail::enable_if_t<
2187 !std::is_same<detail::decay_t<U>, in_place_t>::value &&
2188 !std::is_same<expected<T, E>, detail::decay_t<U>>::value &&
2189 !std::is_same<unexpected<E>, detail::decay_t<U>>::value>;
2192 using expected_enable_from_other = detail::enable_if_t<
2221 } // namespace detail
2223 namespace detail {
2240 detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =
2246 detail::enable_if_t<std::is_constructible<
2252 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2258 detail::enable_if_t<std::is_constructible<
2288 detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =
2294 detail::enable_if_t<std::is_constructible<
2300 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2306 detail::enable_if_t<std::is_constructible<
2330 detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =
2336 detail::enable_if_t<std::is_constructible<
2342 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2348 detail::enable_if_t<std::is_constructible<
2376 detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =
2382 detail::enable_if_t<std::is_constructible<
2388 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2394 detail::enable_if_t<std::is_constructible<
2429 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2435 detail::enable_if_t<std::is_constructible<
2460 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
2466 detail::enable_if_t<std::is_constructible<
2520 detail::enable_if_t<std::is_nothrow_copy_constructible<U>::value>
2534 detail::enable_if_t<!std::is_nothrow_copy_constructible<U>::value &&
2553 detail::enable_if_t<!std::is_nothrow_copy_constructible<U>::value &&
2578 detail::enable_if_t<std::is_nothrow_move_constructible<U>::value>
2590 detail::enable_if_t<!std::is_nothrow_move_constructible<U>::value>
3025 } // namespace detail
3053 class expected : private detail::expected_move_assign_base<T, E>,
3054 private detail::expected_delete_ctor_base<T, E>,
3055 private detail::expected_delete_assign_base<T, E>,
3056 private detail::expected_default_ctor_base<T, E> {
3075 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3082 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3088 using impl_base = detail::expected_move_assign_base<T, E>;
3089 using ctor_base = detail::expected_default_ctor_base<T, E>;
3362 detail::enable_if_t<std::is_constructible<T, Args &&...>::value> * =
3366 ctor_base(detail::default_constructor_tag{}) {}
3369 detail::enable_if_t<std::is_constructible<
3373 ctor_base(detail::default_constructor_tag{}) {}
3376 detail::enable_if_t<std::is_constructible<E, const G &>::value> * =
3378 detail::enable_if_t<!std::is_convertible<const G &, E>::value> * =
3382 ctor_base(detail::default_constructor_tag{}) {}
3386 detail::enable_if_t<std::is_constructible<E, const G &>::value> * =
3388 detail::enable_if_t<std::is_convertible<const G &, E>::value> * = nullptr>
3391 ctor_base(detail::default_constructor_tag{}) {}
3395 detail::enable_if_t<std::is_constructible<E, G &&>::value> * = nullptr,
3396 detail::enable_if_t<!std::is_convertible<G &&, E>::value> * = nullptr>
3400 ctor_base(detail::default_constructor_tag{}) {}
3404 detail::enable_if_t<std::is_constructible<E, G &&>::value> * = nullptr,
3405 detail::enable_if_t<std::is_convertible<G &&, E>::value> * = nullptr>
3409 ctor_base(detail::default_constructor_tag{}) {}
3412 detail::enable_if_t<std::is_constructible<E, Args &&...>::value> * =
3416 ctor_base(detail::default_constructor_tag{}) {}
3419 detail::enable_if_t<std::is_constructible<
3424 ctor_base(detail::default_constructor_tag{}) {}
3427 detail::enable_if_t<!(std::is_convertible<U const &, T>::value &&
3430 detail::expected_enable_from_other<T, E, U, G, const U &, const G &>
3433 : ctor_base(detail::default_constructor_tag{}) {
3442 detail::enable_if_t<(std::is_convertible<U const &, T>::value &&
3445 detail::expected_enable_from_other<T, E, U, G, const U &, const G &>
3448 : ctor_base(detail::default_constructor_tag{}) {
3458 detail::enable_if_t<!(std::is_convertible<U &&, T>::value &&
3460 detail::expected_enable_from_other<T, E, U, G, U &&, G &&> * = nullptr>
3462 : ctor_base(detail::default_constructor_tag{}) {
3472 detail::enable_if_t<(std::is_convertible<U &&, T>::value &&
3474 detail::expected_enable_from_other<T, E, U, G, U &&, G &&> * = nullptr>
3476 : ctor_base(detail::default_constructor_tag{}) {
3486 detail::enable_if_t<!std::is_convertible<U &&, T>::value> * = nullptr,
3487 detail::expected_enable_forward_value<T, E, U> * = nullptr>
3493 detail::enable_if_t<std::is_convertible<U &&, T>::value> * = nullptr,
3494 detail::expected_enable_forward_value<T, E, U> * = nullptr>
3500 detail::enable_if_t<std::is_nothrow_constructible<T, U &&>::value> * =
3502 detail::enable_if_t<!std::is_void<G>::value> * = nullptr,
3503 detail::enable_if_t<
3504 (!std::is_same<expected<T, E>, detail::decay_t<U>>::value &&
3505 !detail::conjunction<std::is_scalar<T>,
3506 std::is_same<T, detail::decay_t<U>>>::value &&
3524 detail::enable_if_t<!std::is_nothrow_constructible<T, U &&>::value> * =
3526 detail::enable_if_t<!std::is_void<U>::value> * = nullptr,
3527 detail::enable_if_t<
3528 (!std::is_same<expected<T, E>, detail::decay_t<U>>::value &&
3529 !detail::conjunction<std::is_scalar<T>,
3530 std::is_same<T, detail::decay_t<U>>>::value &&
3559 detail::enable_if_t<std::is_nothrow_copy_constructible<G>::value &&
3574 detail::enable_if_t<std::is_nothrow_move_constructible<G>::value &&
3588 template <class... Args, detail::enable_if_t<std::is_nothrow_constructible<
3600 template <class... Args, detail::enable_if_t<!std::is_nothrow_constructible<
3626 detail::enable_if_t<std::is_nothrow_constructible<
3640 detail::enable_if_t<!std::is_nothrow_constructible<
3754 detail::enable_if_t<detail::is_swappable<OT>::value &&
3755 detail::is_swappable<OE>::value &&
3760 &&detail::is_nothrow_swappable<T>::value
3762 &&detail::is_nothrow_swappable<E>::value) {
3785 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3791 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3797 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3803 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3813 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3816 detail::throw_exception(bad_expected_access<E>(err().value()));
3820 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3823 detail::throw_exception(bad_expected_access<E>(err().value()));
3827 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3830 detail::throw_exception(bad_expected_access<E>(std::move(err()).value()));
3834 detail::enable_if_t<!std::is_void<U>::value> * = nullptr>
3837 detail::throw_exception(bad_expected_access<E>(std::move(err()).value()));
3874 namespace detail {
3876 using exp_t = typename detail::decay_t<Exp>::value_type;
3878 using err_t = typename detail::decay_t<Exp>::error_type;
3884 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
3885 class Ret = decltype(detail::invoke(std::declval<F>(),
3888 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
3891 ? detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp))
3896 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
3897 class Ret = decltype(detail::invoke(std::declval<F>()))>
3899 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
3901 return exp.has_value() ? detail::invoke(std::forward<F>(f))
3908 class Ret = decltype(detail::invoke(std::declval<F>(),
3910 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr>
3912 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
3915 ? detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp))
3920 class Ret = decltype(detail::invoke(std::declval<F>())),
3921 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr>
3923 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
3925 return exp.has_value() ? detail::invoke(std::forward<F>(f))
3932 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
3933 class Ret = decltype(detail::invoke(std::declval<F>(),
3935 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
3937 using result = ret_t<Exp, detail::decay_t<Ret>>;
3938 return exp.has_value() ? result(detail::invoke(std::forward<F>(f),
3944 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
3945 class Ret = decltype(detail::invoke(std::declval<F>(),
3947 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
3951 detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp));
3959 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
3960 class Ret = decltype(detail::invoke(std::declval<F>())),
3961 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
3963 using result = ret_t<Exp, detail::decay_t<Ret>>;
3964 return exp.has_value() ? result(detail::invoke(std::forward<F>(f)))
3969 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
3970 class Ret = decltype(detail::invoke(std::declval<F>())),
3971 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
3975 detail::invoke(std::forward<F>(f));
3983 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
3984 class Ret = decltype(detail::invoke(std::declval<F>(),
3986 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
3989 -> ret_t<Exp, detail::decay_t<Ret>> {
3990 using result = ret_t<Exp, detail::decay_t<Ret>>;
3992 return exp.has_value() ? result(detail::invoke(std::forward<F>(f),
3998 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
3999 class Ret = decltype(detail::invoke(std::declval<F>(),
4001 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4005 detail::invoke(std::forward<F>(f), *std::forward<Exp>(exp));
4013 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4014 class Ret = decltype(detail::invoke(std::declval<F>())),
4015 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4018 -> ret_t<Exp, detail::decay_t<Ret>> {
4019 using result = ret_t<Exp, detail::decay_t<Ret>>;
4021 return exp.has_value() ? result(detail::invoke(std::forward<F>(f)))
4026 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4027 class Ret = decltype(detail::invoke(std::declval<F>())),
4028 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4032 detail::invoke(std::forward<F>(f));
4043 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
4044 class Ret = decltype(detail::invoke(std::declval<F>(),
4046 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4048 using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;
4051 : result(unexpect, detail::invoke(std::forward<F>(f),
4055 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
4056 class Ret = decltype(detail::invoke(std::declval<F>(),
4058 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4065 detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());
4069 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4070 class Ret = decltype(detail::invoke(std::declval<F>(),
4072 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4074 using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;
4077 : result(unexpect, detail::invoke(std::forward<F>(f),
4081 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4082 class Ret = decltype(detail::invoke(std::declval<F>(),
4084 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4091 detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());
4096 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
4097 class Ret = decltype(detail::invoke(std::declval<F>(),
4099 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4101 -> expected<exp_t<Exp>, detail::decay_t<Ret>> {
4102 using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;
4106 : result(unexpect, detail::invoke(std::forward<F>(f),
4111 detail::enable_if_t<!std::is_void<exp_t<Exp>>::value> * = nullptr,
4112 class Ret = decltype(detail::invoke(std::declval<F>(),
4114 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4121 detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());
4126 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4127 class Ret = decltype(detail::invoke(std::declval<F>(),
4129 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4131 -> expected<exp_t<Exp>, detail::decay_t<Ret>> {
4132 using result = expected<exp_t<Exp>, detail::decay_t<Ret>>;
4136 : result(unexpect, detail::invoke(std::forward<F>(f),
4141 detail::enable_if_t<std::is_void<exp_t<Exp>>::value> * = nullptr,
4142 class Ret = decltype(detail::invoke(std::declval<F>(),
4144 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4151 detail::invoke(std::forward<F>(f), std::forward<Exp>(exp).error());
4158 class Ret = decltype(detail::invoke(std::declval<F>(),
4160 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4162 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
4164 : detail::invoke(std::forward<F>(f),
4169 class Ret = decltype(detail::invoke(std::declval<F>(),
4171 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4172 detail::decay_t<Exp> or_else_impl(Exp &&exp, F &&f) {
4174 : (detail::invoke(std::forward<F>(f),
4180 class Ret = decltype(detail::invoke(std::declval<F>(),
4182 detail::enable_if_t<!std::is_void<Ret>::value> * = nullptr>
4184 static_assert(detail::is_expected<Ret>::value, "F must return an expected");
4186 : detail::invoke(std::forward<F>(f),
4191 class Ret = decltype(detail::invoke(std::declval<F>(),
4193 detail::enable_if_t<std::is_void<Ret>::value> * = nullptr>
4194 detail::decay_t<Exp> or_else_impl(Exp &&exp, F &&f) {
4196 : (detail::invoke(std::forward<F>(f),
4201 } // namespace detail
4267 detail::enable_if_t<(std::is_void<T>::value ||
4269 detail::is_swappable<T>::value &&
4271 detail::is_swappable<E>::value> * = nullptr>