У меня есть странные ошибки компиляции с GCC 5.1.0 (tdm64-1) компиляции следующий кодСтранная ошибка компиляции при вызове явно специализированного члена класса функции шаблона
template <class T>
struct test {
template <class X>
bool func();
};
template <class X, class Y>
bool testfunc(X x, Y y)
{
test<Y> s;
if (s.func<X>()) // <-- parse error here
return false;
}
void func2()
{
testfunc(double(), long());
}
Ошибка
testX.cpp: In function 'bool testfunc(X, Y)':
testX.cpp:12:15: error: expected primary-expression before '>' token
if (s.func<X>())
^
testX.cpp:12:17: error: expected primary-expression before ')' token
if (s.func<X>())
Обратите внимание, что ошибка возникает только в версии, когда Y является параметром шаблона. Когда я удаляю параметр шаблона Y и создаю экземпляр теста с известным типом (например, test < int>), он компилируется без ошибок.
Итак, что здесь не так?
удивительным. Но где двусмысленность? Указывает ли ключевое слово template, что func является шаблоном или что это функция-член шаблона? Даже если я расскажу компилятору, что это шаблон, компилятор все еще не знает, является ли он членом или функцией. (Ну, возможно, это ясно из синтаксиса) –
@AndreasH. Вы не можете иметь переменные-члены шаблона, поэтому из синтаксиса ясно. Проблема связана с токенами '<' and '>', которые сильно перегружены в C++. – TartanLlama