Помогите с ошибкой компиляции в шаблоне
От: niralex  
Дата: 16.03.19 12:46
Оценка:
Не компилируется такой код:
template<class T>
struct A{
    template<class U>
    void Test(){}
};
void f()
{
    A<float> a;
    a.Test<int>(); // ok
}
template<class T>
void g()
{
    A<T> a;
    a.Test();        // ok
    a.Test<int>();   // ошибка компиляции!
}

1) Не могу понять причину ошибки.
2) Как решить/обойти проблему?

Сообщение об ошибке:
file.cpp|16|error: expected primary-expression before 'int'
file.cpp|16|error: expected ';' before 'int'

Спасибо за помощь.
Re: Помогите с ошибкой компиляции в шаблоне
От: niXman Ниоткуда https://github.com/niXman
Дата: 16.03.19 12:50
Оценка: 3 (1)
template<class T>
struct A{
    template<class U>
    void Test(){}
};
void f()
{
    A<float> a;
    a.Test<int>(); // ok
}
template<class T>
void g()
{
    A<T> a;
    a.Test();        // ok
    a.template Test<int>();   //<<<<<<<<<<<<<<<<<<<<<<<
}
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Помогите с ошибкой компиляции в шаблоне
От: watchmaker  
Дата: 16.03.19 12:51
Оценка: 3 (1) +1 :)
Здравствуйте, niralex, Вы писали:

N>2) Как решить/обойти проблему?


a.template Test<int>();


N>1) Не могу понять причину ошибки.

Шаблонный класс A может иметь специализации, которые ещё не известны при первой встрече функции g. Т.е. функция Test может быть шаблонной, а может и не быть. Нужно явно выбрать и сообщить какая она.
Re[2]: Помогите с ошибкой компиляции в шаблоне
От: niralex  
Дата: 16.03.19 12:58
Оценка:
Спасибо, вопрос решен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.