@@ -29,25 +29,27 @@ template <typename Fn, typename... BoundArgTs> class BoundFn {
29
29
}
30
30
31
31
public:
32
- BoundFn (Fn &&F, BoundArgTs &&...BoundArgs)
33
- : F(std::move(F)), BoundArgs(std::forward<BoundArgTs>(BoundArgs)...) {}
32
+ template <typename FnInit, typename ... BoundArgInitTs>
33
+ BoundFn (FnInit &&F, BoundArgInitTs &&...BoundArgs)
34
+ : F(std::forward<FnInit>(F)),
35
+ BoundArgs (std::forward<BoundArgInitTs>(BoundArgs)...) {}
34
36
35
37
template <typename ... ArgTs> auto operator ()(ArgTs &&...Args) {
36
38
return callExpandingBound (std::index_sequence_for<BoundArgTs...>(),
37
39
std::forward<ArgTs>(Args)...);
38
40
}
39
41
40
42
private:
41
- std:: decay_t <Fn> F;
42
- std::tuple<std:: decay_t < BoundArgTs> ...> BoundArgs;
43
+ Fn F;
44
+ std::tuple<BoundArgTs...> BoundArgs;
43
45
};
44
46
45
47
} // namespace detail
46
48
47
49
template <typename Fn, typename ... BoundArgTs>
48
- detail::BoundFn<Fn, BoundArgTs...> bind_front (Fn &&F,
49
- BoundArgTs &&...BoundArgs) {
50
- return detail::BoundFn<Fn, BoundArgTs...>(
50
+ detail::BoundFn<std:: decay_t <Fn>, std:: decay_t < BoundArgTs> ...>
51
+ bind_front (Fn &&F, BoundArgTs &&...BoundArgs) {
52
+ return detail::BoundFn<std:: decay_t <Fn>, std:: decay_t < BoundArgTs> ...>(
51
53
std::forward<Fn>(F), std::forward<BoundArgTs>(BoundArgs)...);
52
54
}
53
55
0 commit comments