Стабильная сортировка и трехстороннее сравнение по умолчанию и пользовательское трехстороннее сравнениеC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Стабильная сортировка и трехстороннее сравнение по умолчанию и пользовательское трехстороннее сравнение

Сообщение Гость »


Почему следующий код с пользовательским оператором трехстороннего сравнения не компилируется? Он компилируется при замене пользовательского оператора трехстороннего сравнения оператором по умолчанию (закомментировано в коде ниже). Я тестировал это с помощью 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;
}
The error message includes

Код: Выделить всё

is_invocable_v' evaluated to false
, however

Код: Выделить всё

const bool x = A(1) < A(2)
does compile. See detailed compiler errors here: https://gcc.godbolt.org/z/T5o7dG3Kq


Источник: https://stackoverflow.com/questions/781 ... comparison
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»