Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板类型规范_C++_Templates_Language Lawyer - Fatal编程技术网

C++ C++;模板类型规范

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::

我有一个空类,与一个空函数同名。当我尝试将此类作为模板参数传递时,收到一个错误:

“参数1处的类型/值不匹配”

“'Test'不是参数'\u Ty'的有效模板类型参数”

考虑:

#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标识符