Почему структура, определенная внутри функции, не может использоваться как функтор для std :: for_each?

Следующий код не компилируется. Компилятор жалуется на * отсутствие соответствующей функции для вызова 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) '

7
задан James McNellis 29 December 2010 в 02:09
поделиться