It always works, because the _expression_ results of the right-hand side are stored in temporaries before doing the assignment.