C++ C++;模板类型规范
我有一个空类,与一个空函数同名。当我尝试将此类作为模板参数传递时,收到一个错误: “参数1处的类型/值不匹配” “'Test'不是参数'\u Ty'的有效模板类型参数” 考虑:C++ C++;模板类型规范,c++,templates,language-lawyer,C++,Templates,Language Lawyer,我有一个空类,与一个空函数同名。当我尝试将此类作为模板参数传递时,收到一个错误: “参数1处的类型/值不匹配” “'Test'不是参数'\u Ty'的有效模板类型参数” 考虑: #include <vector> void Test() { } class Test { }; int main() { std::vector<Test> test; } #包括 无效测试(){ } 课堂测试{ }; int main(){ 病媒试验; } 改为 std::
#include <vector>
void Test() {
}
class Test {
};
int main() {
std::vector<Test> test;
}
#包括
无效测试(){
}
课堂测试{
};
int main(){
病媒试验;
}
改为
std::vector<class Test>
std::vector
似乎可以工作,但我无法确定这是标准要求的,还是编译器随机支持的
有人能指出,如何解决此问题或链接到需要此行为的标准吗?是的,您必须使用名称前面的关键字
类来消除歧义,这会导致详细的类型说明符
:
(强调矿山)
如果在变量、函数或
还声明了相同名称的枚举数,然后
声明在作用域中,只能使用
详细的类型说明符([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()
}
- 结束示例 ]
以及:
详细类型说明符:
- 类键属性说明符seqopt嵌套名称说明符opt标识符
- 类键简单模板id
- 类键嵌套名称说明符templateopt简单模板id
- 枚举嵌套名称说明符opt标识符