Как исправить синтаксис в этом коде изобилует шаблонами? - PullRequest
2 голосов
/ 15 июля 2010

следующий код

template<typename T, typename U> class Alpha
{
public:
    template<typename V> void foo() {}
};

template<typename T, typename U> class Beta
{
public:
    Alpha<T, U> alpha;
    void arf();
};

template<typename T, typename U> void Beta<T, U>::arf()
{
    alpha.foo<int>();
}

int main()
{
    Beta<int, float> beta;
    beta.arf();
    return 0;
}

Не компилируется из-за:

.. / src / main.cpp: в функции-члене ‘Void Beta :: arf ()’:
../src/main.cpp:16: ошибка: ожидается первичное выражение перед "int"
../src/main.cpp:16: ошибка: ожидается ‘;’ Перед "int"

Как, черт возьми, я могу это исправить? Я перепробовал все, что мог придумать.

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

alpha::foo является зависимым именем , используйте alpha.template foo<int>().

Предполагается, что зависимые имена равны

  • не может быть типами, если с префиксом typename
  • не может быть шаблонами, если непосредственно не указан префикс template
4 голосов
/ 15 июля 2010

Попробуйте alpha.template foo<int>(). Обратите внимание, что ваш код прекрасно компилируется с VC8. Поскольку альфа имеет зависимый тип, вы должны указать, что foo является шаблоном.

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