On Wed, Jul 22, 2020 at 12:51 PM Scott Michaud via Std-Proposals <std-proposals@lists.isocpp.org> wrote:

One solution (for C++) is to make an additional, explicit version of the constructor that has intent-declaring parameters (which can be viewed in the IDE's overload list). In this specific case, my initial thoughts would be to create a std::reserve structure (and possibly a std::default_initialize structure, etc.).

I briefly discussed this on the #Include C++ Discord channel, and feedback was mostly positive. One person suggested converting the constructor to a two-parameter version, which avoids creating the structure. I think I like their idea better, especially since it frees std::reserve from always being a size_t container,

I'm generally in favor of this.  It is a fairly small addition, and is very useful in member initializer lists (where, say, using a lambda would require spelling out the vector type).

Another way to do this is with struct reserve templated on the size type.  I mention this not because I prefer it, but a proposal should explore the design space.

I also have a slight preference towards the two parameter constructor, declared as:

struct reserve_t { constexpr explicit reserve_t() = default; };
inline constexpr reserve_t reserve;

The explicit default constructor keeps it from being called as vector({}, 2);
 Nevin ":-)" Liber  <mailto:nevin@eviloverlord.com>  +1-847-691-1404