#include <utility>
#include <iostream>
struct H {
template<std::size_t ... Idxs, class ... Ts>
static decltype(auto) get_desired (
std::index_sequence<Idxs ...>,
Ts && ... ts
) {
struct Ignore { Ignore (...) {} };
return
([] (decltype(Idxs, Ignore{}) ..., auto && t, auto ...)
-> decltype(auto) {
return std::forward<decltype(t)> (t);
}) (std::forward<Ts> (ts) ...);
}
};
template<std::size_t N, class ... Ts>
decltype(auto) get_nth_param (Ts && ... ts) {
return H::get_desired (
std::make_index_sequence<N> {},
std::forward<Ts> (ts) ...
);
}
int main() {
// your code goes here
std::cout << get_nth_param<3> (10, 20, 30, "Testme") << std::endl;
return 0;
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCgkKc3RydWN0IEggewoJdGVtcGxhdGU8c3RkOjpzaXplX3QgLi4uIElkeHMsIGNsYXNzIC4uLiBUcz4KCXN0YXRpYyBkZWNsdHlwZShhdXRvKSBnZXRfZGVzaXJlZCAoCgkJc3RkOjppbmRleF9zZXF1ZW5jZTxJZHhzIC4uLj4sCgkJVHMgJiYgLi4uIHRzCgkpIHsKCQlzdHJ1Y3QgSWdub3JlIHsgSWdub3JlICguLi4pIHt9IH07CgkJCgkJcmV0dXJuCgkJCShbXSAoZGVjbHR5cGUoSWR4cywgSWdub3Jle30pIC4uLiwgYXV0byAmJiB0LCBhdXRvIC4uLikKCQkJLT4gZGVjbHR5cGUoYXV0bykgewoJCQkJcmV0dXJuIHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZSh0KT4gKHQpOyAKCQkJfSkgKHN0ZDo6Zm9yd2FyZDxUcz4gKHRzKSAuLi4pOwoJfQp9OwoKdGVtcGxhdGU8c3RkOjpzaXplX3QgTiwgY2xhc3MgLi4uIFRzPgpkZWNsdHlwZShhdXRvKSBnZXRfbnRoX3BhcmFtIChUcyAmJiAuLi4gdHMpIHsKCXJldHVybiBIOjpnZXRfZGVzaXJlZCAoCgkJc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+IHt9LAoJCXN0ZDo6Zm9yd2FyZDxUcz4gKHRzKSAuLi4KCSk7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJc3RkOjpjb3V0IDw8IGdldF9udGhfcGFyYW08Mz4gKDEwLCAyMCwgMzAsICJUZXN0bWUiKSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==