Следующий код не компилируется. Компилятор жалуется на * отсутствие соответствующей функции для вызова for_each *. Почему это так?
#include <map>
#include <algorithm>
struct Element
{
void flip() {}
};
void flip_all(std::map<Element*, Element*> input)
{
struct FlipFunctor
{
void operator() (std::pair<Element* const, Element*>& item)
{
item.second->flip();
}
};
std::for_each(input.begin(), input.end(), FlipFunctor());
}
Когда я перемещаю struct FlipFunctor
перед функцией flip_all
, код компилируется.
Полное сообщение об ошибке:
нет соответствующей функции для вызова ' for_each (std :: _ Rb_tree_iterator
>, std :: _ Rb_tree_iterator >, flip_all (std :: map , std :: allocator >) :: FlipFunctor) '