Modified to differentiate situations when splatting does and does not
occur and checks argument cardinality at macro expansion time if not.