Zip-like construction of objects from parameter collections
I see one error:

assert(std::all_of(sizes.begin(), sizes.end(), [&amp;](size_t s){return s=sizes[0];}));
                                                                     ^


This is an assignment, not a test. You probably meant s == sizes[0].
You can help this by passing s as a const value:

assert(std::all_of(sizes.begin(), sizes.end(), [&amp;](size_t const s){return s == sizes[0];}));


Additionally, you may not mind destroying your old vectors (via move). So it may be worth looking at using move construction on the result vector:

std::vector&lt;T&gt; zipConstruct(std::vector&lt;Arg&gt;&amp;... argVec)
{                                //        ^^^  pass by reference as you may modify them

      result.emplace_back(std::move(argVec[i])...);
                      //  ^^^^^^^^^^   Add standard move to get move semantics.