Некрасивые ошибки компилятора с шаблоном - PullRequest
2 голосов
/ 19 февраля 2011
template<typename T>
struct function
{
   typedef T type;
   template<typename U>
   static void f() {}
};

template<typename T>
struct caller
{
        int count;
        caller(): count() {}
        void operator()()
        {
                count++;
                T::f<typename T::type>();
        }
};

int main() {
        caller<function<int> > call;
        call();
        return 0;
}

Мне кажется, это правильно, но компилятор выдает эту ужасную ошибку, которую я не могу понять:

prog.cpp: в функции-члене void caller :: operator () () ':
prog.cpp: 17: ошибка: ожидание `(' до '>' токен
prog.cpp: 17: ошибка: ожидаемое первичное выражение до ')' токен

Для вашего удобства, код размещен здесь -> http://www.ideone.com/vtP7G

1 Ответ

3 голосов
/ 19 февраля 2011
T::template f<typename T::type>();

Без этого «шаблона» код анализируется как:

T::f [less-than operator] typename T::type [greater-than operator]...

Что является ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...