Hardсинтаксис

Что такое .template и ->template?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

При вызове template-метода на dependent type x.foo<int>() компилятор парсит < как «меньше». .template явно говорит «foo — шаблон».

template<class T>
void f(T& x) {
    x.template get<int>();    // .template обязателен для dependent x
}

template<class T>
void g(T* p) {
    p->template get<int>();   // ->template для указателя
}
  • Применяется, когда x/p — зависимые типы (типа T);
  • Без .template при инстанциации ошибка «expected primary-expression»;
  • Запомнить: dependent + template method → .template.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.