C++17中模板参数包的偏序规则

这是来自temp.deduct.partial的示例。

template<class... Args>           void f(Args... args);         // #1
template<class T1, class... Args> void f(T1 a1, Args... args);  // #2
template<class T1, class T2>      void f(T1 a1, T2 a2);         // #3

f();                // calls #1
f(1, 2, 3);         // calls #2
f(1, 2);            // calls #3; non-variadic template #3 is more specialized
                    // than the variadic templates #1 and #2

为什么f(1, 2, 3)#2

在CWG1395之前很容易理解。#2不能推导出,#1因为Args是一个参数包而T1不是,所以#2比 更专业#1

但是在CWG1395之后如何理解这个例子呢?似乎T1可以从Args现在开始推断。

类似地,如果A是从函数参数包转换而来,则将其与参数模板的每个剩余参数类型进行比较。

以上是C++17中模板参数包的偏序规则的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>