有人可以帮助我使用 C++ 中的嵌套名称说明符吗?模板?
下面的示例代码有什么问题?它不能在 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
What's wrong with the following sample code? It doesn't compile in GCC. Why?
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 output:
error: template argument 1 is invalid
error: expected `{' before ‘>’ token
error: expected unqualified-id before ‘>’ token
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Clang 的错误消息更有帮助:
有关更多信息,请考虑阅读 Stack Overflow C++ 常见问题解答 “我必须在何处以及为什么必须将“template”和“typename”放在依赖名称上?”
Clang's error message is a bit more helpful:
For more information consider reading the Stack Overflow C++ FAQ "Where and why do I have to put “template” and “typename” on dependent names?"
T
,该名称出现在嵌套名称说明符D
后面,该说明符取决于模板参数TA< /代码>。构造
D::T
必须将T
解释为类模板的名称,因此必须使用template
关键字按当时的标准。T
appears after the nested-name-specifierD<TA>
which depends on the template-parameterTA
. The constructD<TA>::T<TBA>
must interpretT
as the name of a class template and so thetemplate
keyword is mandated by the Standard at that point.