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