#include <functional>
#include <vector>
template <typename ...T, typename Result>
void componentWise(std::function<Result(T...)> f,
const std::vector<T> & ...v,
std::vector<Result> & result)
{
// (I don't know how to express the assert)
result.reserve(v.size()...);
auto _v = v.begin()...;
auto _result = result.begin();
for(; _v != v.end()...; ++_v..., ++_result)
{
*_result = expression(*_v...);
}
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uVCwgdHlwZW5hbWUgUmVzdWx0Pgp2b2lkIGNvbXBvbmVudFdpc2Uoc3RkOjpmdW5jdGlvbjxSZXN1bHQoVC4uLik+IGYsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUPiAmIC4uLnYsCiAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxSZXN1bHQ+ICYgcmVzdWx0KQp7CiAgICAvLyAoSSBkb24ndCBrbm93IGhvdyB0byBleHByZXNzIHRoZSBhc3NlcnQpCiAgICByZXN1bHQucmVzZXJ2ZSh2LnNpemUoKS4uLik7CgogICAgYXV0byBfdiA9IHYuYmVnaW4oKS4uLjsKICAgIGF1dG8gX3Jlc3VsdCA9IHJlc3VsdC5iZWdpbigpOwogICAgZm9yKDsgX3YgIT0gdi5lbmQoKS4uLjsgKytfdi4uLiwgKytfcmVzdWx0KQogICAgewogICAgICAgICpfcmVzdWx0ID0gZXhwcmVzc2lvbigqX3YuLi4pOwogICAgfQp9
prog.cpp: In function ‘void componentWise(std::function<Result(T ...)>, const std::vector<T>& ..., std::vector<Result>&)’:
prog.cpp:12:23: error: parameter packs not expanded with ‘...’:
prog.cpp:12:23: note: ‘v’
prog.cpp:12:24: error: expected ‘,’ or ‘;’ before ‘...’ token
prog.cpp:14:23: error: parameter packs not expanded with ‘...’:
prog.cpp:14:23: note: ‘v’
prog.cpp:14:24: error: expected ‘;’ before ‘...’ token
prog.cpp:14:24: error: expected primary-expression before ‘...’ token
prog.cpp:14:24: error: expected ‘)’ before ‘...’ token
prog.cpp:14:24: error: expected primary-expression before ‘...’ token
prog.cpp:14:24: error: expected ‘;’ before ‘...’ token
prog.cpp:14:33: error: expected ‘;’ before ‘...’ token