template <typename F>

struct SignatureOf

This is instantiated with a function type solely to be partially

specialized as the means of getting that type's argument list into a

parameter pack. By having the precise argument signature unpacked as the

call signature of operator(), arguments are handled at call sites entirely

like arguments in a call site using the function pointer type directly.

If instead it just defined operator()(auto

&

&

...), then all the things like

interpreting literals as particular integer types, or {...} as an implicit

constructor for the given type, would not work the same way.