假设我有以下代码:
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 在模板实例化中也需要空格)。
谁是对的?
我找到了关于它的线程(将自身称为模板模板参数的模板类?),但我无法理解标准的 14.6.1/2 并且还看到了 LLVM 错误 14350(http://www.mail- archive.com/llvmbugs@cs.uiuc.edu/msg21095.html)。那么,clang 和 intel 错了吗?