Что-то я завис. Есть такой псевдокод:
class Alloc
{
public:
template<class T>
static T* alloc()
{
return new T();
}
};
template<class T, class TAlloc = Alloc>
class Foo
{
public:
void foo()
{
T* t = TAlloc::alloc<T>(); // error there
}
};
int main(int argc, char *argv[])
{
Foo<int> f;
f.foo();
}
собственно ругается где указано выше, говорит
expected primary-expression before '>' token
при этом, если
- поменять TAlloc на Alloc (явное указание класса) - все работает
- не указывать <T>, то говорит что не может вывести тип для T, и alloc() не объявлен как следствие.
Чувствую что надо где-то поколдовать с typename но не знаю где и как. Подскажите плиз, если можно с пояснением что, как и почему (ссылка на страницу умной книжки тоже сойдет).