Ответ 1
Иногда внутри шаблона вам нужно написать a.template foo<0>()
вместо a.foo<0>()
.
@melpomene дал этот замечательный пример в комментариях:
template<typename T>
void do_stuff() {
T a;
a.template foo<0>();
}
do_stuff<A>();
- В С++ 03,
a.template foo<0>()
не следует использовать в вашей текущей ситуации.
g++
выдаст следующее предупреждение при компиляции вашего кода:
предупреждение: ключевое слово 'template' за пределами шаблона [-WС++ 11-extensions]
- В С++ 11 грамматика была упрощена, позволяя везде использовать синтаксис
a.template foo<0>()
.