i'd increment counter each parameter during parameter pack expansion. here pseudo code of want achieve:
template<class ... args> void dosomething(args ... _args) { std::size_t counter = 0; bar(dosomethingwithonearg(_args, counter++)...); }
the problem code is, while order of args
is preserved, order in function parameters evaluated not defined, i.e. on clang
order in counter expressions evaluated same order of args
while in gcc
reversed. portable, standard way of achieving this?
thanks!
you add helper function:
template <typename ...args> void dosomething(args &&... args) { dosomethingimpl(std::make_index_sequence<sizeof...(args)>(), std::forward<args>(args)...); } template <typename ...args, std::size_t ...n> void dosomethingimpl(std::index_sequence<n...>, args &&... args) { bar(onecommand(std::forward<args>(args), n)...); }