В вашем случае вы можете использовать рекурсию, чтобы делать то, что вы хотите. Для этого вам нужно две перегрузки. Один с одним параметром bool, а другой с двумя параметрами bool плюс часть variadi c. Это дает вам доступ к каждому значению индивидуально, когда вы проходите путь через пакет параметров. В этом случае это будет выглядеть как
// quick and dirty pow fucntion. There are better ones out there like https://stackoverflow.com/a/101613/4342498
template <typename T, typename U>
auto pow(T base, U exp)
{
T ret = 1;
for (int i = 0; i < exp; ++i)
ret *= base;
return ret;
}
template <bool Last>
int some_function()
{
return Last;
}
template <bool First, bool Second, bool... Rest>
int some_function()
{
return First * pow(2, sizeof...(Rest) + 1) + some_function<Second, Rest...>();
}
int main()
{
std::cout << some_function<1,0,0,0>();
}
Какие выходы:
8