Вызов статического метода шаблона из функции шаблона

82
3

Я пытаюсь сделать метод шаблона, который вызывает статический метод шаблона другого класса, но я получаю некоторые компиляционные ошибки. Минимальный случай следующий.


Если я скомпилирую код ниже


template<class E, class D>
int foo() {
return D::bar<E>() + 1;
}

он выдает следующий вывод


g++ -std=c++11 test.cpp -c
test.cpp: In function ‘int foo()’:
test.cpp:4:18: error: expected primary-expression before ‘>’ token
return D::bar<E>() + 1;
^
test.cpp:4:20: error: expected primary-expression before ‘)’ token
return D::bar<E>() + 1;

Когда я заменяю D::bar<E> на D::bar, компиляция проходит так. Кажется, есть некоторая проблема синтаксического анализа с аргументом шаблона функции. Как и в других случаях, мне кажется, что для этого нужно немного using или typename.

спросил(а) 2015-11-09T15:57:00+03:00 5 лет назад
1
Решение
102

Вам нужно указать, что зависимым именем bar является шаблон:


return D::template bar<E>() + 1;
// ^^^^^^^^

Live Demo


Подробнее о ключевых словах typename и template см. этот вопрос.

ответил(а) 2015-11-09T15:59:00+03:00 5 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема