If you have worked with tuples, variants, and futures in C++, you may frequently find yourself frustrated with how complicated it can be to get seemingly simple things done, especially if coming from a language with more direct support for algebraic datatypes. Expanding tuples in anything but trivial ways requires being something of a language expert. Visiting variants can often be even worse. Forming chains of ".then" continuations (if you even
have a ".then") can be a drag. These are supposed to be powerful, useful abstractions, yet they are often too complicated for most programmers.
The Argot library aims to solve some of these problems by acting as something like an <algorithm> or <utility> but for dealing with TupleLike, VariantLike, and now FutureLike concepts and the expansions of their underlying values into function arguments. Easily perform what would otherwise be complicated variant visitation. Expand tuples in more powerful ways than with std::apply. Form continuations with futures without explicitly writing complicated .then() chains. Do things that you may not have thought were possible.
This talk is on an updated and re-named version of a library from the C++ Standard proposal "A Single Generalization of std::invoke, std::apply, and std::visit" (
http://wg21.link/p0376 ). The library is planned to be added to the boost review queue sometime later this year.