我有一个与空函数同名的空类。当我尝试将此类作为模板参数传递时,我收到错误:
“参数1 ”
中的类型/值不匹配“'Test'不是参数'_Ty'的有效模板类型参数”
考虑:
#include <vector>
void Test() {
}
class Test {
};
int main() {
std::vector<Test> test;
}
更改为
std::vector<class Test>
似乎有效,但我无法发现,这是标准要求,还是我的编译器随机支持。
有人可以指出,如何解决此问题或链接到标准,这需要这种行为?
答案 0 :(得分:4)
是的,您必须使用名称前面的关键字class
来消除歧义,从而产生详细的类型说明符。
(强调我的)
如果在变量,函数或变量的范围内声明了类名 同时也声明了同名的枚举器,然后两者都是 声明在范围内,该类只能使用一个引用 elaborated-type-specifier ([basic.lookup.elab])。 [实施例:
struct stat { // ... }; stat gstat; // use plain stat to define variable int stat(struct stat*); // redeclare stat as function void f() { struct stat* ps; // struct prefix needed to name struct stat stat(ps); // call stat() }
- 结束示例]
阐述型说明符:
- class-key attribute-specifier-seq opt nested-name-specifier opt identifier
- class-key simple-template-id
- class-key nested-name-specifier template opt simple-template-id
- enum nested-name-specifier opt identifier