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.