#include #include using namespace std ; /* how to use index_sequence_for */ // 1. Base Case: Called when only one argument is left template T print_all(T last) { cout << last << endl; return last; } // 2. Recursive Case: Unpacks the first item and passes the rest forward template void print_all(First first, Rest... rest) { cout << first << ", "; // Recursive call with the remaining parameter pack print_all(rest...); } // Helper function that expands the index sequence template void print_tuple_impl(const std::tuple& t, std::index_sequence object1 ) { // Fold expression // ((std::cout << std::get(t) << " "), ...); // std::cout << '\n'; print_all( get(t)... ) ; } // Main function taking a variadic tuple template void print_tuple(const std::tuple& t) { // std::index_sequence_for automatically deduces the size of Args... print_tuple_impl(t, std::index_sequence_for{}); } int main() { auto my_tuple = std::make_tuple(10, "hello", 3.14); print_tuple(my_tuple); // Output: 10 hello 3.14 }