This can be used for in-place initialization of non-moveable types. For compilers that don't support variadic templates, only up to four arguments are supported. We can always add more, of course, but this should be good enough until we move to a later MSVC that has full support for variadic templates.e
Inspired by std::experimental::optional from the "Library Fundamentals" C++ TS (API, spec).
This is a tricky thing to upstream without a fallback. Do we have any other cases where we've added a variadic template without a fallback for non-variadic-template-supporting compilers? Without precedent I'd be a little hesitant to be the first example of that situation. Essentially no LLVM code would realistically use this API without a fallback, I'd imagine.