看看这个代码片段
template<class T>
void print(T var)
{
std::cout << var << " ";
}
template<class... Args>
void Variadic(Args... args)
{
print(args...);
}
int main()
{
Variadic();
}
当我编译它说:
候选:模板无效打印(T)
候选人期望 1 个参数,提供 0 个参数
他是对的。事实上,我没有在参数包中提供任何参数。
但是,为什么这段代码会编译呢?
template<class T>
void print(T var)
{
std::cout << var << " ";
}
template<class... Args>
void Variadic(Args... args)
{
auto x = {0, (print(args), 0)...};
}
int main()
{
Variadic();
}
我要做的第一件事是将第一个 0 推入initializer_list<>
好的,现在让我们继续:编译器看到
(print(args), 0)...
它试图调用 print()……哦等等……参数包是空的,而 print() 函数有 1 个参数。
那为什么它评估为auto x = {0};
?
为什么编译器没有给我与以前完全相同的错误?