struct A
{
template<int>
void foo()
{}
};
int main()
{
A a;
a.foo<0>(); // ok
a.template foo<0>(); // also ok
}
显然,a.foo<0>();
比a.template foo<0>();
更简洁,直观和富有表现力。
即使a.template foo<0>();
足够,为什么C ++允许a.foo<0>();
?
答案 0 :(得分:12)
有时,在模板中,您需要编写a.template foo<0>()
而不是a.foo<0>()
。
@melpomene在评论中给出了这个很好的例子:
template<typename T>
void do_stuff() {
T a;
a.template foo<0>();
}
do_stuff<A>();
a.template foo<0>()
不应在当前情况下使用。 g++
会输出以下警告:
警告:&#39>模板&#39;模板外的关键字[-Wc ++ 11-extensions]
a.template foo<0>()
语法简化了语法。