Sorry... looks like I was getting more complicated than necessary with talks of unions, mpl, etc. and suddenly realized what the "," actually does. To answer my own question:
template<typename ArgPack1, typename ArgPack2>
double g(const ArgPack1& args1, const ArgPack2& args2)
{
return f( (args1, args2) ); //comma does the union!
}