有人能帮我在C++模板中使用嵌套的名称说明符吗
Can someone help me with nested-name specifiers in C++ templates?
下面的示例代码有什么问题?它不在GCC中编译。为什么?
template <class TA>
struct A
{
template <class TAB> struct B;
};
template <class TC>
struct C {};
template <class TD>
struct D
{
template <class TTD> class T {};
};
template<class TA>
template<class TBA>
struct A<TA>::B : C<typename D<TA>::T<TBA> >
{
int foo;
};
GCC 4.3.4输出:
error: template argument 1 is invalid
error: expected `{' before ‘>’ token
error: expected unqualified-id before ‘>’ token
Clang的错误消息更有帮助:
error: use 'template' keyword to treat 'T' as a dependent template name
struct A<TA>::B : C<typename D<TA>::T<TBA> >
^
template
有关更多信息,请考虑阅读堆栈溢出C++常见问题解答"我必须在依赖名称上放置"template"answers"typename"的位置和原因?">
struct A<TA>::B : C<typename D<TA>::template T<TBA> >
对于要由模板参数显式限定的模板名称,必须知道该名称才能引用模板。
当成员模板专用化的名称出现在后面时。或->在后缀表达式中,或在限定id中的嵌套名称说明符之后,并且后缀表达式或限定id显式依赖于模板参数(14.6.2(,成员模板名称必须以关键字template为前缀。否则,该名称将被假定为命名非模板
T
出现在依赖于模板参数TA
的嵌套名称说明符D<TA>
之后。构造D<TA>::T<TBA>
必须将T
解释为类模板的名称,因此template
关键字在这一点上是Standard强制要求的。
相关文章:
- 在 CRTP 中使用嵌套名称说明符
- C++预期的嵌套名称说明符
- 缩短成员函数作用域说明符(嵌套类)(C++)
- C++:在嵌套名称说明符中命名的不完整类型
- 使用另一个模板类的嵌套名称说明符专用化模板类
- 在嵌套名称说明符中使用枚举(编译器警告)
- 详细说明的类型说明符中的类型相关嵌套名称说明符
- 编译器错误,应为嵌套的名称说明符
- 嵌套名称说明符中使用的类型不完整
- 错误:不完整的类型..在嵌套名称说明符中使用
- 类型名称关键字和嵌套名称说明符
- 编译器错误:typedef 之前的预期嵌套名称说明符
- 错误:'xxx'之前应嵌套名称说明符
- 正在解析循环依赖的嵌套类型说明符
- 嵌套名称说明符中第一个命名空间名称的名称查找
- 前向声明问题:嵌套名称说明符中使用的类型不完整'enums::Category'
- 嵌套名称说明符中使用的不完整类型,为什么?
- 预期的嵌套名称说明符- gcc
- 嵌套名称说明符中的不完整类型
- 使用子类作为基类的模板参数和嵌套名称说明符