9 template <
class Ret,
class Arg>
12 constexpr virtual Ret operator()(Arg&&)
const = 0;
15 template <
class F,
class Ret,
class Arg>
23 constexpr Ret operator()(Arg&& arg)
const override {
24 return std::invoke(f_, std::move(arg));
31 template <
class Ret,
class Arg>
32 requires (not std::is_reference_v<Arg>)
33 struct function<Ret(Arg)> {
35 std::shared_ptr<_function<Ret, Arg>> instance_ =
nullptr;
40 requires std::invocable<std::decay_t<F>&, Arg> and std::same_as<std::invoke_result_t<std::decay_t<F>&, Arg>, Ret>
41 constexpr function(F&& f)
42 : instance_(std::make_shared<
_function_impl<std::decay_t<F>, Ret, Arg>>(
43 std::forward<F>(f))) {}
44 constexpr Ret operator()(
const Arg& arg)
const {
46 return instance_->operator()(std::move(tmp));
48 constexpr Ret operator()(Arg&& arg)
const {
49 return instance_->operator()(std::move(arg));
51 constexpr Ret operator%(
const Arg& arg)
const {
53 return instance_->operator()(std::move(tmp));
55 constexpr Ret operator%(Arg&& arg)
const {
56 return instance_->operator()(std::move(arg));
Definition: function.hpp:16
Definition: function.hpp:10
Definition: function.hpp:29