Почему следующий код с пользовательским оператором трехстороннего сравнения не компилируется? Он компилируется при замене пользовательского оператора трехстороннего сравнения оператором по умолчанию (закомментировано в коде ниже). Я тестировал это с помощью GCC 13.2 и Clang 18.1.
Код: Выделить всё
#include
#include
#include
struct A {
std::strong_ordering operator(const A&) const {
return std::strong_ordering::equivalent;
};
// std::strong_ordering operator(const A&) const = default;
int x;
};
int main () {
std::vector v = { {1}, {3}, {4}, {7}};
std::ranges::stable_sort(v);
return 0;
}
Код: Выделить всё
is_invocable_v' evaluated to falseКод: Выделить всё
const bool x = A(1) < A(2)Источник: https://stackoverflow.com/questions/781 ... comparison
Мобильная версия