模板模板参数的参数会导致阴影吗?
Can a parameter of a template template parameter cause shadowing?
这是合法的 C++ 吗?
template <typename T, template <typename T> class>
struct S { };
Clang (3.7.1) 拒绝它,抱怨第二个 T
遮住了第一个 T
。 GCC 似乎并不关心它,我认为这是合理的。我认为在模板模板参数中重要的只是参数的数量。
- http://goo.gl/51bHVG (gcc.godbolt.org)
没有。 [temp.local]/6:
A template-parameter shall not be redeclared within its scope
(including nested scopes).
虽然存在正确答案,但我自己需要一些时间才能理解,我只想添加一个示例:
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...
}
这是合法的 C++ 吗?
template <typename T, template <typename T> class>
struct S { };
Clang (3.7.1) 拒绝它,抱怨第二个 T
遮住了第一个 T
。 GCC 似乎并不关心它,我认为这是合理的。我认为在模板模板参数中重要的只是参数的数量。
- http://goo.gl/51bHVG (gcc.godbolt.org)
没有。 [temp.local]/6:
A template-parameter shall not be redeclared within its scope (including nested scopes).
虽然存在正确答案,但我自己需要一些时间才能理解,我只想添加一个示例:
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...
}