в общем следующий код не компилится в ВС2008, хотя отлично компилится в ВС2003. Код очень простой - не понимаю проблему компилятора. #include <vector> #include <algorithm> class cC { }; struct Less { bool operator ()(const cC* lhs, const int& rhs) const { return true; } bool operator ()(const int& lhs, const cC* rhs) const { return false; } }; int main(void) { std::vector<cC*> v; cC* pC = new cC; int i = 9; Less()(pC, i); // 1 Less()(i, pC); // 2 Less()(*v.begin(), i); // 3 std::lower_bound(v.begin(), v.end(), i, Less()); // еррор return 0; } А ошибка такая: Error 1 error C2664: 'bool Less::operator ()(const int &,const cC *) const' : cannot convert parameter 1 from 'cC *' to 'const int &' c:\program files\microsoft visual studio 9.0\vc\include\xutility 346 test А 1 и 2 и 3 компилится нормально - непонятно. хелп!
systemio Чего-то ты друг здесь нагородил. Указатели у тебя сравниваются с int. Если уж на то пошло, то имхо лучше так. Код (Text): class cC { }; struct Less { bool operator ()(const cC* lhs, const cC* rhs) const {return false; } }; int main(void) { std::vector<cC*> v; cC* pC = new cC; int i = 9; std::lower_bound(v.begin(), v.end(), (cC*)i, Less()); return 0; }
struct Less { bool operator ()(const cC* lhs, const int& rhs) const { return true; } bool operator ()(const int& lhs, const cC* rhs) const { return false; } bool operator ()(const cC* lhs, const cC* rhs) const { return false; } }; В дебаге выполняются доп. проверки предиката.
народ чо вы тупите, мне не нужен bool operator ()(const cC* lhs, const cC* rhs). когда я приводил пример - я его максимально упростил для большего понимания. вот что надо class cC { public: int i; }; struct Less { bool operator ()(const cC* lhs, const int& rhs) const { return lhs->i < rhs; } bool operator ()(const int& lhs, const cC* rhs) const { return lhs < rhs->i; } }; В ВС2003 и в дебаге и релизе компилится, а в ВС2008 тока в релизе. Видимо ММ намудрили что-то с дебагом!? Такая просьба, кто-нить может дать libboost_signals-vc80-mt-s-1_33_1.lib.