#include #include template void fun(T data=1) //当有默认参数的时候默认参数本身不能模板类型推导 { std::cout << data << std::endl; } template R1 fun1(T1 a, T2 b) //这里R1需要显示指定,因为并没有能推导的地方 { return a + b; } template auto fun2(T1 a, T2 b) -> decltype(a < b ? a : b) //当然有的时候可能ab是引用会推导出引用 { return a < b ? a : b; } template auto fun3(T1 a, T2 b) ->std::decay_t //当然有的时候可能ab是引用会推导出引用,外层剥离引用 { return a < b ? a : b; } int main() { fun(1); fun(); }