I came across this syntax while reading up on std::integer_sequence.
What does this double bracket do? It looks like some form of loop. Does it only work with non-type template parameters? Must it be in the same order as the parameters? Can we iterate backwards? Skip a number?
// pretty-print a tuple
template<class Ch, class Tr, class Tuple, std::size_t... Is>
void print_tuple_impl(std::basic_ostream<Ch,Tr>& os,
const Tuple& t,
std::index_sequence<Is...>)
{
((os << (Is == 0? "" : ", ") << std::get<Is>(t)), ...);
}