In the presence of types which are truthy (ie, contextually convertible to bool), its too easy to accidentally swap the unpacking:
// Oops, backwards!
auto [result, error_code] = do_something();
if(error_code) {
process(result);
}