2016-03-02 58 views
7

这是合法的C++吗?模板模板参数的参数是否会导致阴影?

template <typename T, template <typename T> class> 
struct S { }; 

锵(3.7.1)拒绝它,抱怨第二T阴影第一T。海湾合作委员会似乎不关心它,我认为这是合理的。我认为这只是模板模板参数中涉及的参数数量。

+0

为什么你需要使用'T'两次?如果你想在第二个模板中使用'T',你可以编写'template class>' –

+1

@DavidHaim这不是强制性的,但是当第一个参数被赋予第二个参数时模板模板,为嵌套模板参数使用相同(或至少相似)名称是有意义的。你的建议很有趣,我从来没有试图给模板模板参数指定一个默认参数。与'template class>'相比,它实现了什么? – nodakai

+0

我想知道在帖子标题中搜索和摧毁标签词的人的驱动动机是什么?他们可能同样热衷于将'NULL'替换为'nullptr'? – nodakai

回答

7

[temp.local]/6

模板参数不得其范围 (包括嵌套的范围)内重新声明。

+0

嗯,我花了一段时间才意识到你的引用实际上与我的案例有关,但是对,它肯定是关于“嵌套范围”。 – nodakai