gcc i niedzialajacy predykat

0
# include <iostream> 
# include <vector> 
# include <set> 
# include <algorithm> 
using namespace std;  
class Temp
{ 
public: 
        int zwrocPole() const 
        { 
                return pole; 
        } 
        Temp(int liczba):pole(liczba){} 
private: 
        int pole; 
};   
 
int main() 
{ 
        set<Temp*> wektor; 
        wektor.insert(new Temp(5));
        wektor.insert(new Temp(5));
        wektor.insert(new Temp(5));
        struct predykat 
        {
                 int wartosc;
                 predykat(const int tmpWartosc):wartosc(tmpWartosc){} 
                 bool operator() (const Temp* tmp) 
                 {  
                        return tmp->zwrocPole() == wartosc;
                 }
        }; 
 
        set<Temp*>::iterator it; 
        it = find_if(wektor.begin(), wektor.end(), predykat(5));  // *****
        cout << (*it)->zwrocPole() << endl;  
        
        return 0; 
}

Pod Visualem leci, pod gcc kuleje z bledem dopasowania funkcji i smiesznymi stl'owskimi komunikatami w miejscu zazanaczonym w komentarzem.
Co poradzic?

0

Przenieś strukturę 'predykat' poza ciało funkcji main.

0

gcc rzadko gubi sie przy szablonach, visual ma z nimi o wiele wiecej bugow.. blad najprawdopodobniej tkwi w kodzie, bo z tego co pamietam, funkcje STL'a zwykle wymaga aby funktor::operator() byl const

        struct predykat 
        {
                 int wartosc;
                 predykat(const int tmpWartosc):wartosc(tmpWartosc){} 
                 bool operator() (const Temp* tmp) const  /// <--- !!
                 {  
                        return tmp->zwrocPole() == wartosc;
                 }
        }; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1