【发布时间】:2022-01-06 10:08:05
【问题描述】:
我尝试使用默认模板参数编写此函数:
template<typename A, typename B>
void func(int i1, int i2, A a, B b = 123){
...
}
在我看来,我可以这样称呼它:func(1, 2, 3) 并且编译器应该将类型 B 从默认值推导出为 int,但我得到 no instance of overloaded function。
在这种情况下,是不是 C++ 构造不正确,编译器无法推断类型?
【问题讨论】:
-
你认为
func<int, float>(1,2,3)应该怎么做? -
@KarlKnechtel 相当于调用 func
(1,2,3,123) -
来吧,模板已经死了,就用
void func(int i1, int i2, auto a, auto b = 123)吧。 -
@Vorac 同样的问题:
func(1, 2, 3)失败,因为无法推断出b的类型。
标签: c++ templates default template-argument-deduction default-arguments