16:
public function_base<Type, function_base_impl<Type, Return, false, Xs...>> {
19 using FnInvQuals = Fn&;
22 static constexpr bool is_callable_from =
23 std::is_invocable_r_v<Return, Fn, Xs...> && std::is_invocable_r_v<Return, Fn&, Xs...>;
26 using result_type = Return;
28 Return operator()(Xs... args) {
return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...); }
65:
public function_base<Type, function_base_impl<Type, Return, false, Xs...>> {
68 using FnInvQuals = Fn
const&;
71 static constexpr bool is_callable_from =
72 std::is_invocable_r_v<Return, Fn
const, Xs...> && std::is_invocable_r_v<Return, Fn
const&, Xs...>;
75 using result_type = Return;
77 Return operator()(Xs... args)
const {
return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...); }
85 using FnInvQuals = Fn
const&;
88 static constexpr bool is_callable_from = std::is_invocable_r_v<Return, Fn
const&, Xs...>;
91 using result_type = Return;
93 Return operator()(Xs... args)
const& {
return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...); }
101 using FnInvQuals = Fn
const&&;
104 static constexpr bool is_callable_from = std::is_invocable_r_v<Return, Fn
const, Xs...>;
107 using result_type = Return;
109 Return operator()(Xs... args)
const&& {
return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...); }
114:
public function_base<Type, function_base_impl<Type, Return, true, Xs...>> {
117 using FnInvQuals = Fn&;
120 static constexpr bool is_callable_from =
121 std::is_nothrow_invocable_r_v<Return, Fn, Xs...> && std::is_nothrow_invocable_r_v<Return, Fn&, Xs...>;
124 using result_type = Return;
126 Return operator()(Xs... args)
noexcept {
return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...); }
163:
public function_base<Type, function_base_impl<Type, Return, true, Xs...>> {
166 using FnInvQuals = Fn
const&;
169 static constexpr bool is_callable_from = std::is_nothrow_invocable_r_v<Return, Fn
const, Xs...>
170 && std::is_nothrow_invocable_r_v<Return, Fn
const&, Xs...>;
173 using result_type = Return;
175 Return operator()(Xs... args)
const noexcept {
176 return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...);
185 using FnInvQuals = Fn
const&;
188 static constexpr bool is_callable_from = std::is_nothrow_invocable_r_v<Return, Fn
const&, Xs...>;
191 using result_type = Return;
193 Return operator()(Xs... args)
const&
noexcept {
194 return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...);
203 using FnInvQuals = Fn
const&&;
206 static constexpr bool is_callable_from = std::is_nothrow_invocable_r_v<Return, Fn
const, Xs...>;
209 using result_type = Return;
211 Return operator()(Xs... args)
const&&
noexcept {
212 return this->get_invoke()(this->mStorage, std::forward<Xs>(args)...);