В этом контексте перегрузки не могут быть разрешены компилятором. std::for_each()
ожидает некоторый произвольный тип F
для своего функтора, а не некоторый конкретный тип функции, поэтому перегруженный myFunc
здесь неоднозначен.
Вы можете явно выбрать, какую перегрузку использовать:
std::for_each( v.begin(), v.end(), (void (*)(int))myfunc);
std::for_each( s.begin(), s.end(), (void (*)(std::string))myfunc);
Альтернативы (последние два из комментариев) :
typedef void (*IntFunc)(int);
std::for_each(/*...*/, (IntFunc)myfunc);
typedef void IntFunc(int);
std::for_each(/*...*/, static_cast<IntFunc*>(&myFunc));
// using identity (e.g. from boost or C++0x):
std::for_each(/*...*/, (identity<void(int)>::type*)myfunc);