这是合法的C ++吗?
template <typename T, template <typename T> class>
struct S { };
Clang(3.7.1)拒绝它,抱怨第一个T
的第二个T
阴影。海湾合作委员会似乎不关心它,我认为这是合理的。我认为只有模板模板参数中重要的参数数量。
答案 0 :(得分:7)
没有。 [temp.local]/6:
template-parameter 不得在其范围内重新声明 (包括嵌套范围)。
答案 1 :(得分:0)
虽然正确答案存在,但我需要一些时间来理解,我只是想添加一个例子:
template <class Key, class T>
class MyData {
public:
// ...
template <class Key, class T>
inline static MyData<Key, T> *get(MyMap<Key, T> *ptr)
{
return NULL: // Logic here...
}
// ...
}
作为“Template-parameters shall not be re-declared within its scope (including nested scopes)
”,
上面的 get(..)
方法应该更改并使用其他名称,例如:
template <class KeyType, class Type>
inline static MyData<KeyType, Type> *get(MyMap<KeyType, Type> *ptr)
{
return NULL: // Logic here...
}