What about a silly wrapper class like this:
struct OrderedCall
{
template <typename F, typename ...Args>
OrderedCall(F && f, Args &&... args)
{
std::forward<F>(f)(std::forward<Args>(args)...);
}
};
Usage:
void foo(int, char, bool);
OrderedCall{foo, 5, 'x', false};
If you want a return value, you could pass it in by reference (you’ll need some trait to extract the return type), or store it in the object, to get an interface like:
auto x = OrderedCall{foo, 5, 'x', false}.get_result();