C++;模板参数和部分专门化:强类型还是弱类型? 今天,我和我的一个朋友在一个愚蠢的错误上做了很多努力,我想知道模板参数是如何在C++中工作的。考虑下面的代码,在这里我尝试专门化一个类 ADT/其中 i 是未签名的int < />代码>,虽然 MyClass 期望 int 参数: #包括 模板 类MyClass { }; 模板 结构属性; 模板 结构属性 { }; int main(int argc,char*argv[]) { attr att; 返回0; }
C++;模板参数和部分专门化:强类型还是弱类型? 今天,我和我的一个朋友在一个愚蠢的错误上做了很多努力,我想知道模板参数是如何在C++中工作的。考虑下面的代码,在这里我尝试专门化一个类 ADT/其中 i 是未签名的int < />代码>,虽然 MyClass 期望 int 参数: #包括 模板 类MyClass { }; 模板 结构属性; 模板 结构属性 { }; int main(int argc,char*argv[]) { attr att; 返回0; },c++,templates,c++14,typing,C++,Templates,C++14,Typing,g++失败并显示错误消息 main.cpp: In function ‘int main(int, char**)’: main.cpp:20:22: erreur : aggregate ‘attr<MyClass<1> > att’ has incomplete type and cannot be defined attr<MyClass<1>> att; main.cpp:在函数“int main(int,char**)”中:
g++
失败并显示错误消息
main.cpp: In function ‘int main(int, char**)’:
main.cpp:20:22: erreur : aggregate ‘attr<MyClass<1> > att’ has incomplete type and cannot be defined
attr<MyClass<1>> att;
main.cpp:在函数“int main(int,char**)”中:
main.cpp:20:22:erreur:聚合“attr att”的类型不完整,无法定义
attr att;
并且clang
编译它(由于att
未使用,因此仅发出警告)
所以我想知道:
- 规范中是否有任何规定对其中一个有利
- 我们可以说
模板参数的类型比clang
弱吗g++
的表单,并且如果a的对应值的类型不同于i的类型,则扣减失败。如果P有一个包含[i]
的表单,并且如果i的类型不是整数类型,则演绎失败
他们的testsuite中的testcase仅对函数进行测试,对于这些函数,它们似乎会发出合理的错误消息:
此外,由于部分专门化永远无法推导,我们还遇到了一个问题,即这样的构造是否应该提前被拒绝。我认为,如果您愿意,可以应用:
知道哪些名称是类型名称可以检查每个模板的语法。程序格式不正确,不需要诊断,如果:
- 无法为模板生成有效的专门化,并且该模板未实例化,或者…”