The article goes even further than that:
When all else is equal, prefer push_back to emplace_back. It still shows the example of using
emplace_back with a pre-existing object, which as you say, isn't the point of
emplace_back. It also states that it's
more work for the compiler, stating that the template resolution seems more complex, and suggesting it's likely to bloat compile times. That's a more persuasive point (hard numbers are provided at the end of the article), I wonder if more work has been done on this.
The author seems to be an advanced C++ programmer, but doesn't seem to properly acknowledge that, as you say, The premise of of emplace_back is that you use it for calling the constructor of the object in place. The only instance of proper use of emplace_back is in
widgets.emplace_back(foo, bar, baz);
I was surprised to see no follow-up for this example:
auto w = Widget(1,2,3);
widgets.emplace_back(w); // Fixed? Nope!
No mention of the obvious fix:
widgets.emplace_back(1,2,3);
I don't mean to 'pile on', but, a pet peeve of mine:
emplace_back is not magic C++11 pixie dust. This isn't saying anything. You could say
garbage collection isn't magic, or
error-correcting codes aren't magic, or
sound type systems aren't magic. To say that something isn't magic is an empty statement, especially when it's something like
emplace_back which introduces an important new ability.