Well the idea would be that you could unroll it too:
for co_await(auto [key, value] : dictionary) {
foo(key, value);
}
(I forget what we intended for for co_await syntax, but it's not in there yet anyway so let's go with it)
The code would end up instantiating foo over all the key/value type combinations. The coroutine callback logic for dictionary iteration would yield each key/value pair by callback directly without any variant involved.
This is all speculation though, because actually implementing this and convincing people that the reader will not be confused is still a bit of a step.