Почему компаратор std::map должен быть константным?

Я написал функциональный объект компаратора для std::map для сравнения строк без учета регистра.

class CaseInsensitiveCmp
{
public:
    bool operator() (const std::string& op1, const std::string& op2) const
    {
        std::string op1low(op1.size(),'c'), op2low(op2.size(),'c');
        std::transform(op1.begin(), op1.end(),op1low.begin(),::tolower);
        std::transform(op2.begin(), op2.end(),op2low.begin(),::tolower);
        return op1low<op2low;
    }
};

Проблема в том, что если функция-член (operator() ) не является константной функцией, т.е.

 bool operator() (const std::string& op1, const std::string& op2);

Компилятор компилятора XLC генерирует ошибку en

CaseInsensitiveCmp::operator()(const std::string &, const std::string &)" is not a viable candidate.

Может ли кто-нибудь сослаться на какую-либо точку в стандарте С++, в которой говорится, что функция-член функционального объекта сравнения должна быть константной?


person zapredelom    schedule 16.01.2014    source источник
comment
Правильный вопрос, помня о константной корректности, будет таким: почему он не должен быть константным:]   -  person stijn    schedule 16.01.2014