tags:

views:

66

answers:

2

This is my code:

#include <algorithm>
#include <vector>
#include <string>
using namespace std;
class A {
  struct CompareMe {
    bool operator() (const string*& s1, const string*& s2) const { return true; }
  };
  void f() {
    CompareMe comp;
    vector<string*> v;
    min_element(v.begin(), v.end(), comp);
  }
};

And this is the error:

error: no match for call to ‘(A::CompareMe) (std::string*&, std::string*&)’
test.cpp:7: note: candidates are: bool A::CompareMe::operator()(const 
std::string*&, const std::string*&) const

I feel that there is some syntax defect, but can't find out which one. Please, help!

+4  A: 

Your placement of const is wrong. A T*& cannot be implicitly converted to a const T*&. Try

bool operator() (const string* const& s1, const string* const& s2) const { ...
//                             ^^^^^                    ^^^^^

instead.


Or just pass by value (thanks Mike):

bool operator() (const string* s1, const string* s2) const { ...

which will be more efficient for simple objects like a pointer, if the compiler uses a standard ABI.

KennyTM
Or pass the pointers by value, `bool operator()(const string*, const string*);`
Mike Seymour
Many thanks, I'm passing now by value
Vincenzo
+2  A: 
sbi