в ВС2003 ок, а в ВС2008 не ок

Тема в разделе "LANGS.C", создана пользователем systemio, 15 апр 2009.

  1. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    в общем следующий код не компилится в ВС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 компилится нормально - непонятно. хелп!
     
  2. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    интересная штука - в дебаге не компилится а в релизе и комп и выполняется - можж баг ММ?
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    systemio
    Чего-то ты друг здесь нагородил. Указатели у тебя сравниваются с int. Если уж на то пошло, то имхо лучше так.

    Код (Text):
    1. class cC { };
    2.  
    3. struct Less
    4. {
    5.   bool operator ()(const cC* lhs, const cC* rhs) const {return false; }
    6. };
    7.  
    8. int main(void)
    9. {
    10.     std::vector<cC*> v;
    11.     cC* pC = new cC;
    12.     int i = 9;
    13.     std::lower_bound(v.begin(), v.end(), (cC*)i, Less());
    14.     return 0;
    15. }
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    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; }
    };

    В дебаге выполняются доп. проверки предиката.
     
  5. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    народ чо вы тупите, мне не нужен 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.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    No comments.
     
  7. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    эй народ ну дайте кто нить libboost_signals-vc80-mt-s-1_33_1.lib.
     
  8. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    systemio
    вроде бы можно слить отседова: http://www.boostpro.com/download
     
  9. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    О! сэнкс!