Naw*_*waz 3 c++ templates c++11
我们知道以下代码编译正常:
void f() {}
void g(void) {}
f();
g();
Run Code Online (Sandbox Code Playgroud)
但为什么不是以下内容:
template<typename T>
void f() {}
template<typename T>
void g(T) {}
f<void>(); //ok
g<void>(); //error
Run Code Online (Sandbox Code Playgroud)
为什么线条g<void>()
会出错?
错误:没有匹配函数来调用'g()'
为什么不能用void
类型参数进行实例化?为什么函数模板没有实例化为:
void g(void) {} //to be instantiated from the function template
Run Code Online (Sandbox Code Playgroud)
毕竟,这是我要求的.
我正在寻找权威的答案.
法律主义论点是void
一个无法完成的不完整类型,因此永远不能用作顶级类型.比较void a;
.这有点令人困惑,因为void
在参数列表中不是一个类型,而是一个表示没有参数的约定.