
Braddock Gaskill wrote:
Instead of going with generalized future composition, I've tried the route of 'wait_all(<future-list>) ' and 'wait_any(<future-tuple>)'
This is exactly what I personally would like to see. I don't relish the thought of digging out a return type or exception from a future<variant<float, string, tuple<int, double, bool>
. I would just want something that wakes me up when dinner is ready and let me figure out which of my futures are valid or have failed, if I even care.
You don't need to use the return type, if you don't want to use it afterwards. And in the case you're interested in the actula return value, a function like above will have to return the variant<float, string, tuple<int, double, bool> > as well. So what do you gain from using a function? Operator overloading gives you variable future counts with far less coding effort. With functions you have to spell out a specialization for every possible number of futures you want to combine.
wait(f1 || (f2 && f3)); might be nice syntax, does actually add functionality, and is simple enough as well.
Yeah, sure. The library in the vault has a futurize() function doing exactly what you want, just pass a arbitrary complex future expression to it. No need to know the returned data type. Regards Hartmut