Namaran

Code daily. Without assist.

2026-08-25

print_each.cpp

#include <iostream>

template <typename First, typename... Rest>
void print_each(First first, Rest... rest) {
    std::cout << first << '\n';
    print_each(rest...);
}

int main() {
    print_each(1, 2, 3);
}

このコードはコンパイルできません。何が問題で、どう直せばよいでしょうか?

Answer

print_eachRestが空になるまで自分自身を再帰的に呼びますが、パックが空のときの呼び出しprint_each()に一致するオーバーロードがありません。テンプレートはFirst firstという必須の1引数を要求するので、0引数の呼び出しに使える候補が存在せず、コンパイルエラーになります。再帰を止める、引数なしのオーバーロードを追加すれば直ります:

void print_each() {}