This mostly solves the unpacking problem. Thus, there are only two problems left:
1. I need to handcraft the tuple type myself, and make sure it matches the function declaration. (In other words, I don't want to manually write tuple<char, short>. I want to write foo::arg_tuple.)
2. This provides no support for named parameters. Tuples in C++ are numbered, not named.
It might be a bit verbose, but I think I would still prefer this over native syntax for unpacking.