7#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_FUNCTIONAL_BIND_OVERLOADS_HPP_
8#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_FUNCTIONAL_BIND_OVERLOADS_HPP_
14#include "arene/base/stdlib_choice/decay.hpp"
15#include "arene/base/stdlib_choice/forward.hpp"
16#include "arene/base/stdlib_choice/is_constructible.hpp"
17#include "arene/base/stdlib_choice/is_copy_constructible.hpp"
18#include "arene/base/stdlib_choice/is_move_constructible.hpp"
19#include "arene/base/stdlib_choice/move.hpp"
25namespace bind_overloads_detail {
31template <
typename... OverloadTs>
32class bind_overloads_impl;
37template <
typename OverloadT>
38class bind_overloads_impl<OverloadT> : OverloadT {
42 explicit bind_overloads_impl(OverloadT
const& overload)
noexcept(std::is_nothrow_copy_constructible<OverloadT>::value)
43 : OverloadT(overload) {}
47 explicit bind_overloads_impl(OverloadT&& overload)
noexcept(std::is_nothrow_move_constructible<OverloadT>::value)
48 : OverloadT(std::move(overload)) {}
51 ~bind_overloads_impl() =
default;
54 using OverloadT::operator();
58 constexpr bind_overloads_impl(bind_overloads_impl
const& copy) =
default;
60 constexpr bind_overloads_impl(bind_overloads_impl&& move) =
default;
62 constexpr auto operator=(bind_overloads_impl
const& copy) -> bind_overloads_impl& =
default;
64 constexpr auto operator=(bind_overloads_impl&& move) -> bind_overloads_impl& =
default;
72template <
typename OverloadT,
typename... OverloadTs>
73class bind_overloads_impl<OverloadT, OverloadTs...>
75 , bind_overloads_impl<OverloadTs...> {
81 template <
typename... UOverloads>
82 constexpr explicit bind_overloads_impl(OverloadT
const& overload, UOverloads&&... overloads)
noexcept(
83 std::is_nothrow_copy_constructible<OverloadT>::value &&
84 std::is_nothrow_constructible<bind_overloads_impl<OverloadTs...>, UOverloads&&...>::value
86 : OverloadT(overload),
87 bind_overloads_impl<OverloadTs...>(std::forward<UOverloads>(overloads)...) {}
93 template <
typename... UOverloadTs>
94 constexpr explicit bind_overloads_impl(OverloadT&& overload, UOverloadTs&&... overloads)
noexcept(
95 std::is_nothrow_move_constructible<OverloadT>::value &&
96 std::is_nothrow_constructible<bind_overloads_impl<OverloadTs...>, UOverloadTs&&...>::value
98 : OverloadT(std::move(overload)),
99 bind_overloads_impl<OverloadTs...>(std::forward<UOverloadTs>(overloads)...) {}
102 ~bind_overloads_impl() =
default;
105 using OverloadT::operator();
107 using bind_overloads_impl<OverloadTs...>::operator();
111 constexpr bind_overloads_impl(bind_overloads_impl
const& copy) =
default;
113 constexpr bind_overloads_impl(bind_overloads_impl&& move) =
default;
115 constexpr auto operator=(bind_overloads_impl
const& copy) -> bind_overloads_impl& =
default;
117 constexpr auto operator=(bind_overloads_impl&& move) -> bind_overloads_impl& =
default;
124template <
typename... OverloadTs>
125class bind_overloads_t : bind_overloads_impl<OverloadTs...> {
128 using bind_overloads_impl<OverloadTs...>::bind_overloads_impl;
130 using bind_overloads_impl<OverloadTs...>::operator();
Definition array_exceptions_disabled.cpp:11
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10