first, I didn't intent to write a shallow answer, I explained exactly why the other solution won't work.
anyway, you example does not include lines 3-5 which supposed to break the recursion
Code:
template <> void print_tuple<0, std::tuple<int, int, int, int>>
(
const std::tuple<int, int, int, int> & f
)
{
if (0 == std::tuple_size<std::tuple<int, int, int, int>>::value){ //returns false
return ;
}
std::get<0>(f); /* ... */
print_tuple<1, std::tuple<int, int, int, int>>(f);
}
Code:
template <> void print_tuple<1, std::tuple<int, int, int, int>>
(
const std::tuple<int, int, int, int> & f
)
{
if (1 == std::tuple_size<std::tuple<int, int, int, int>>::value){ //returns false
return ;
}
std::get<1>(f); /* ... */
print_tuple<1, std::tuple<int, int, int, int>>(f);
}
Code:
template <> void print_tuple<2, std::tuple<int, int, int, int>>
(
const std::tuple<int, int, int, int> & f
)
{
if (2 == std::tuple_size<std::tuple<int, int, int, int>>::value){ //returns false
return ;
}
std::get<2>(f); /* ... */
print_tuple<1, std::tuple<int, int, int, int>>(f);
}
Code:
template <> void print_tuple<3, std::tuple<int, int, int, int>>
(
const std::tuple<int, int, int, int> & f
)
{
if (0 == std::tuple_size<std::tuple<int, int, int, int>>::value){ //returns false
return ;
}
std::get<3>(f); /* ... */
print_tuple<1, std::tuple<int, int, int, int>>(f);
}
Code:
template <> void print_tuple<4, std::tuple<int, int, int, int>>
(
const std::tuple<int, int, int, int> & f
)
{
if (4 == std::tuple_size<std::tuple<int, int, int, int>>::value){ //returns true - simply returns
return ;
}
std::get<4>(f); /* ... */
print_tuple<1, std::tuple<int, int, int, int>>(f);
}