Hence the rule: NEVER use a std::pair. There are no exceptions, zero, nada, nil.
If we cannot trust the language standardization process to produce a usable library type that just represents a pair of things, why would we trust it to produce usable library types for concurrent programming, or for anything else, for that matter? Isn't this a sign that something is dreadfully wrong?