I would summarize it as: use `push_back` when you're pushing something, use `emplace_back` when you want to construct something in the space at the end of the collection. It just so happens that their functionality overlaps, and there really isn't a strong reason to use `push_back(Widget(ctor_arg1, ctor_arg2))` vs `emplace_back(ctor_arg1, ctor_arg2)` with a movable `Widget`, so it comes down to readability and communicating intention. And those will depend on the situation.
Mentioning `Widget` is definitely more explicit, so I agree with the author that `push_back(Constructor(...))` is usually better. Semantically, it's also usually simpler to think of "push a newly-constructed Widget" vs "construct a Widget in the next element of the vector and lengthen the vector to include it".