#include <iostream>
 
template <size_t... Is>
struct index_sequence{};
 
namespace detail {
	template <size_t I,size_t...Is>
	struct make_index_sequence_impl : make_index_sequence_impl<I-1,I,Is...> {};
 
	template <size_t...Is>
	struct make_index_sequence_impl<0,Is...>
	{
		using type = index_sequence<0,Is...>;
	};
}
 
template<size_t N>
using make_index_sequence = typename detail::make_index_sequence_impl<N>::type;
 
 
template<size_t I>
void templated_func()
{
	std::cout << "templated_func" << I << std::endl;
}
 
template <size_t... Is>
void call_templated_func(index_sequence< Is...>)
{
	using do_ = int[];
    do_ {0,(templated_func<Is>(),0)...,0};
}
 
int main()
{
    call_templated_func(make_index_sequence< 10>());
    return 0;
}
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHNpemVfdC4uLiBJcz4Kc3RydWN0IGluZGV4X3NlcXVlbmNle307CgpuYW1lc3BhY2UgZGV0YWlsIHsKCXRlbXBsYXRlIDxzaXplX3QgSSxzaXplX3QuLi5Jcz4KCXN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGwgOiBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8SS0xLEksSXMuLi4+IHt9OwoJCgl0ZW1wbGF0ZSA8c2l6ZV90Li4uSXM+CglzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsPDAsSXMuLi4+Cgl7CgkJdXNpbmcgdHlwZSA9IGluZGV4X3NlcXVlbmNlPDAsSXMuLi4+OwoJfTsKfQoKdGVtcGxhdGU8c2l6ZV90IE4+CnVzaW5nIG1ha2VfaW5kZXhfc2VxdWVuY2UgPSB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbDxOPjo6dHlwZTsKCgp0ZW1wbGF0ZTxzaXplX3QgST4Kdm9pZCB0ZW1wbGF0ZWRfZnVuYygpCnsKCXN0ZDo6Y291dCA8PCAidGVtcGxhdGVkX2Z1bmMiIDw8IEkgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZSA8c2l6ZV90Li4uIElzPgp2b2lkIGNhbGxfdGVtcGxhdGVkX2Z1bmMoaW5kZXhfc2VxdWVuY2U8IElzLi4uPikKewoJdXNpbmcgZG9fID0gaW50W107CiAgICBkb18gezAsKHRlbXBsYXRlZF9mdW5jPElzPigpLDApLi4uLDB9Owp9CgppbnQgbWFpbigpCnsKICAgIGNhbGxfdGVtcGxhdGVkX2Z1bmMobWFrZV9pbmRleF9zZXF1ZW5jZTwgMTA+KCkpOwogICAgcmV0dXJuIDA7Cn0K