Почему произойдет сбой std :: sort, если функция сравнения не является оператором <?

Следующая программа скомпилирована с VC ++ 2012.

#include <algorithm>

struct A
{
    A()
        : a()
    {}

    bool operator <(const A& other) const
    {
        return a <= other.a;
    }

    int a;
};

int main()
{
    A coll[8];
    std::sort(&coll[0], &coll[8]); // Crash!!!
}

Если я изменюreturn a <= other.a; вreturn a < other.a; затем программа работает, как и ожидалось, без исключения.

Почему?

Ответы на вопрос(2)

Ваш ответ на вопрос