次のコードがあるとします。
template <template <typename> class T>
class A {};
template <typename T>
class B
{
A<B> instance;
};
int main()
{
B<int> instance;
}
gcc 4.7.2 と gcc 4.8.0 はこのコードを正常にコンパイルしますが、icc 13.0.1 と clang 3.2 ではエラーが発生しました (clang では B ではなく ::B が必要ですが、icc ではテンプレート インスタンスの < の後に空白も必要です)。
誰が正しいですか?
私はそれについてのスレッドを見つけました (テンプレート テンプレート パラメータとして自身を参照する Template クラス? )、しかし、標準の 14.6.1/2 を理解できず、LLVM バグ 14350 ( http://www.mail- archive.com/llvmbugs@cs.uiuc.edu/msg21095.html )。それで、ここでclangとintelが間違っていますか?