c++模板的递归 为什么把递归终止条件写在下面就报错

#include <iostream>
using namespace std;

template<typename T, typename ... Types>
T sum1(T first, Types ... rest)
{
    return first + sum1(rest...);
}

template<typename T>
T sum1(T t)
{
    return t;
}
int main() 
{
    cout << sum1(12, 34, 67, 78) << endl;
    return 0;
}

错误 C2780 “T sum1(T,Types...)”: 应输入 2 个参数,却提供了 0 个 Project3 c:\users\computer\source\repos\project3\project3\moban.cpp 7

错误 C2672 “sum1”: 未找到匹配的重载函数 Project3 c:\users\computer\source\repos\project3\project3\moban.cpp 8

C、C++被使用的函数/类型/变量等都要写在用到的地方的前面

这个基本语法规则就是这样

你把sum1函数写在前面就能编译通过了