From a language specification consistency and understandability standpoint, I definitely think the execution ordering is much better than a special-casing rule to perform the swapping “all at once”.
Semi-related topic on importance of order in struct initialization: