This is a rather intricate and technical change, but allows in the end to switch back all usages to a main implementation patch, which is now based on `func::BindToArgument` — so this could become the final implementation core and replace the old `PApply` template eventually... Largely, these changes are related to allow for ''perfect forwarding'' of the functor and the argument values to be closed; these will be copied into the ''Binder object'' created by `std::bind`. Notably the `TupleConstructor` was changed to perfect-forward its »source« into the specialised `ElmMapper`; this is possible since the latter already receives a `SRC` template parameter, which can be supplied with whatever base type the `std::forward` invocation will expose. In the specialisation relevant here, template `PartiallyInitTuple`, now an ''universal reference'' is stored and passed to `std::get`, so that (depending on the input used), either a LValue or an RValue reference is used for the extracted data elements. After these changes, all existing usages of `applyFirst()` or `applyLast()` can be replaced by this modernised implementation back-end, thus obsoleting the various hard-coded workaround added during the last years.
9.7 MiB
9.7 MiB
| The file is too large to be shown. |