У вас есть функция с именем term_
и локальная переменная:
Int_T Calculator_engine<Int_T>::term_(Forward_Iterator& beg,Forward_Iterator& end)
// ....
QString term_ = read_next_token_(beg,end);
// ...
result -= term_(beg,end);
GCC использует самое внутреннее определение - в данном случае ваше локальное QString. Затем он пытается найти operator()(QChar*&, QChar*&)
, чтобы удовлетворить этот вызов, но не удается. Видимо визуальная студия делает что-то другое. Я не совсем уверен, что соответствует спецификации - но я подозреваю, что GCC получает это прямо здесь.
Решение, конечно, состоит в том, чтобы не использовать одно и то же имя для локальной переменной и функции.