template <typename T>
void loopAndCompress(int value, T&& t = int())
{
}
int main()
{
loopAndCompress(1);
}
Run Code Online (Sandbox Code Playgroud)
无法推断出 T 的模板参数
为什么它不推断类型?默认参数不适用于模板类型吗?
事实上,默认参数的类型不用于推导类型参数;这是https://en.cppreference.com/w/cpp/language/template_argument_deduction的“非推导上下文”下的第 4 项。
但是,您可以指定在类型推导失败时使用的默认模板参数:
template <typename T = int>
void loopAndCompress(int value, T&& t = int())
{
}
Run Code Online (Sandbox Code Playgroud)
(向 Raymond Chen 指出这一点致敬。)