今天,我的一個朋友和我在一個愚蠢的錯誤中掙扎了很多,我讓我想知道模板參數是如何在C++中工作的。考慮下面的代碼,在那裏我試着部分專業類attr<MyClass<I>>
其中I
是unsigned int
,雖然MyClass
預計的int
參數:C++模板參數和部分專業化:強或弱打字?
#include <iostream>
template<int I>
class MyClass
{
};
template<typename T>
struct attr;
template<unsigned int I>
struct attr<MyClass<I>>
{
};
int main(int argc, char *argv[])
{
attr<MyClass<1>> att;
return 0;
}
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;
而且clang
編譯它(由於att
未被使用,所以只發出警告)。
所以我想知道:
是那裏將有利於一方或另一方的統治規範什麼?
難道我們可以說
clang
模板參數的輸入弱於g++
的嗎?