Лямбдас на помощь! (примечание: требуется C ++ 11)
std::for_each(s.begin(), s.end(), [&](char a){ return f(a); });
Или с помощью decltype для параметра лямбда:
std::for_each(s.begin(), s.end(), [&](decltype(*s.begin()) a){ return f(a); });
С полиморфными лямбдами (C ++ 14):
std::for_each(s.begin(), s.end(), [&](auto a){ return f(a); });
Или устранить ошибку, удалив перегрузку (работает только для свободных функций):
void f_c(char i)
{
return f(i);
}
void scan(const std::string& s)
{
std::for_each(s.begin(), s.end(), f_c);
}
Была та же проблема, решенная обновлением узла до последней версии lts (10.15.1)