Why is that better or worse than an additional constructor overload that
takes a tag type, e.g.   std::vector v(std::reserve, 42)
?

I have no idea, though the non-member function may possibly be more compatible with autocomplete of editors than the constructor??