O
pair
с той лишь разницей, что в случае сpair<bool, iterator> foo();ты увидишь сомнительные
auto x = foo();
x.<ctrl+space>
first
и second
, ничего не говорящие о сути содержимого pair
А с
auto foo() {Ты увидишь более самодокументированные (если очень повезёт, конечно)
struct {
bool is_inserted;
iterator equal_or_inserted;
} x;
/* ... */
return x;
}
auto x = foo();
x.<ctrl+space>
is_inserted
и equal_or_inserted