c++ - 为什么默认参数在模板函数中不起作用?

标签 c++ function templates standards overload-resolution

struct A {};

template<typename T>
void f(int n, T m = 3.14159)
{}

int main()
{    
    f(8, A{}); // ok
    f(8); // error: no matching function for call to 'f'
}

参见 online demo

为什么默认参数在模板函数中不起作用?


编辑:我也试过跟随,想知道为什么它不起作用。

void g(int, auto = 3.14159)
{}

最佳答案

默认函数参数不影响模板参数推导。

您还需要模板参数的默认参数:typename T = double


至于void g(int, auto = 3.14159),好像没办法修复了。

关于c++ - 为什么默认参数在模板函数中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68040354/

相关文章:

c++ - std::codecvt_utf8 方面的问题

php - instanceof 或 method_exist 应该使用哪个?

python - 如何调用返回多个值的函数

c++ - 通过 Rust 中的泛型类型进行编译时算术,类似于 C++?

c++ - 运行 Opencl 时出现异常

c++ - 检查是否存在(重载的)成员函数

python - 如何获取变量的名称

c++ - C++ 中是否有任何方法允许不同数据类型的不同执行路径?

c++ - c++17中的非类型模板参数可以是decltype(auto)吗?

asp.net-mvc - ASP.NET MVC 3 中的条件布局