#include <iostream>
#include <utility>
#include <array>
template <typename... Args>
void foo (Args&&... args) {
const auto v = {args...};
for (auto x : v) std::cout << x << ' '; std::cout << '\n';
}
template <typename> struct Foo;
template <std::size_t... Is>
struct Foo<std::index_sequence<Is...>> {
template <typename Container> // *** Modified
static void execute (const Container& v, void (*f)(decltype(v[Is])&...)) {
f(v[Is]...);
}
};
template <std::size_t N>
void fooArray (const std::array<int, N>& a) {
Foo<std::make_index_sequence<N>>::execute(a, foo);
}
int main() {
fooArray<6>({0,1,2,3,4,5});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGFycmF5PgoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CnZvaWQgZm9vIChBcmdzJiYuLi4gYXJncykgewogICAgY29uc3QgYXV0byB2ID0ge2FyZ3MuLi59OwogICAgZm9yIChhdXRvIHggOiB2KSBzdGQ6OmNvdXQgPDwgeCA8PCAnICc7ICAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lPiBzdHJ1Y3QgRm9vOwoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElzPgpzdHJ1Y3QgRm9vPHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyPiAgLy8gKioqIE1vZGlmaWVkCiAgICBzdGF0aWMgdm9pZCBleGVjdXRlIChjb25zdCBDb250YWluZXImIHYsIHZvaWQgKCpmKShkZWNsdHlwZSh2W0lzXSkmLi4uKSkgewogICAgICAgIGYodltJc10uLi4pOwogICAgfQp9OwoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CnZvaWQgZm9vQXJyYXkgKGNvbnN0IHN0ZDo6YXJyYXk8aW50LCBOPiYgYSkgewogICAgRm9vPHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPj46OmV4ZWN1dGUoYSwgZm9vKTsKfQoKaW50IG1haW4oKSB7CiAgICBmb29BcnJheTw2Pih7MCwxLDIsMyw0LDV9KTsKfQo=