Сравните элементы в наборе структур с помощью '<=>' - PullRequest
0 голосов
/ 01 августа 2020

У меня есть структура под названием node, содержащая объект типа N.

Я хочу создать std::set<node>, и я также хочу использовать set::find(N value), чтобы найти узел в этом наборе без создания фиктивного узла.

В настоящее время код выглядит так:

struct node {
    N value;
    explicit node(N val)
        : value(val) {}
    // always compare nodes by its value only
    auto operator<=>(const node& other) const noexcept -> std::strong_ordering {
        return value <=> other.value;   // <-- ERROR HERE
    }
    // compare nodes with N is allowed
    auto operator<=>(N other_value) const noexcept -> std::strong_ordering {
        return value <=> other_value;  // <-- ERROR HERE
    }
};

Код работает нормально, когда N равно int.

Однако, когда N равно std::string, возникает эта ошибка:

недопустимые операнды для двоичного выражения ('const std :: __ 1 :: basic_string 'и' const std :: __ 1 :: basic_string ') [clang-diagnosti c -error]

В чем проблема и как ее решить?

...