Это не скомпилируется:
template<class X> struct A {
template<int I> void f() {}
};
template<class T> void g()
{
A<T> a;
a.f<3>(); // Compilation fails here (Line 18)
}
int main(int argc, char *argv[])
{
g<int>(); // Line 23
}
В компиляторе (gcc) говорится:
hhh.cpp: В функции 'void g()':
hhh.cpp: 18: ошибка: ожидаемое первичное выражение перед ')' токеном
hhh.cpp: В функции 'void g() [с T = int]':
hhh.cpp: 23: экземпляр здесь
hhh.cpp: 18: ошибка: недопустимое использование члена (вы забыли "&"?)
Может кто-нибудь объяснить, почему это? Есть ли способ заставить его работать?