Gon*_*n I 2 c++ templates c++20
自动占位符类型和显式定义的模板类型参数是否完全等效?
我读到规范指出“占位符类型说明符指定一个占位符类型,稍后将通过从初始值设定项中推导来替换该占位符类型”。
(9.2.8.5 占位符类型说明符 http://eel.is/c++draft/dcl.spec.auto#:auto )
那么就实例化、常量类型、引用类型等而言,以下内容是否等效?
void f1(auto param) {
using T = decltype(param);
T t1;
}
template <class T> void f2(T param ) {
T t1;
}
Run Code Online (Sandbox Code Playgroud)
它们在功能上是等效的,但需要注意的是,该标准并未声明它们实际上是等效的。也就是说,几乎所有方面的工作方式都是相同的f1。f2但你永远不能这样做:
void f1(auto); //declaration of a template.
template<typename T>
void f1(T t) //definition of a template.
{...}
Run Code Online (Sandbox Code Playgroud)
的声明与的定义f1不匹配。f1