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在参数列表中不是一个类型,而是一个表示没有参数的约定.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |