今日、私の友人と私は愚かな間違いで多くの苦労をしました。テンプレートパラメータがC++でどのように機能するか疑問に思っています。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
はそれをコンパイルエラーメッセージで失敗します。MyClass
はint
パラメータを見込んでいますが、私は部分的にクラスI
がunsigned int
あるattr<MyClass<I>>
を専門にしようと、次のコードを、考えてみましょう(att
が使用されていないことによる警告のみ)。
だから私は思っていた:
は、どちらか一方の賛成で支配するだろうスペックに何がありますか?
clang
テンプレートパラメータのタイピングは、g++
のものよりも弱いですか?