Although it looks like a nice proposal, I don't think that it's really workable.
The major issue is that an additional scope is introduced, contrary to how for-loops normally work.
Say you throw an exception in the loop-body, it may be a surprise if generator123 handles the exception and there is no indication in the code that your exception will go through another scope.
And I just looked at the proposal and the 3 suggestions how to deal with exceptions and none of the proposals are good. Even worse: the operator() would act differently through compiler magic and depending on context.
I guess the syntax has to change, it looks pretty right now, but I don't think it can stay that way.