diff --git a/lix/libutil/position.cc b/lix/libutil/position.cc index d98cd4e93..bdce67001 100644 --- a/lix/libutil/position.cc +++ b/lix/libutil/position.cc @@ -17,12 +17,6 @@ Pos::operator std::shared_ptr() const return std::make_shared(&*this); } -bool Pos::operator<(const Pos &rhs) const -{ - return std::forward_as_tuple(line, column, origin) - < std::forward_as_tuple(rhs.line, rhs.column, rhs.origin); -} - std::optional Pos::getCodeLines() const { if (line == 0) diff --git a/lix/libutil/position.hh b/lix/libutil/position.hh index 98fd7f15b..54728fab4 100644 --- a/lix/libutil/position.hh +++ b/lix/libutil/position.hh @@ -67,9 +67,15 @@ struct Pos std::optional getCodeLines() const; - bool operator==(const Pos & rhs) const = default; - bool operator!=(const Pos & rhs) const = default; - bool operator<(const Pos & rhs) const; + // Not defaulted because it's implicitly deleted because C++ is stupid. + constexpr friend auto operator<=>(Pos const & lhs, Pos const & rhs) + { + return std::forward_as_tuple(lhs.line, lhs.column, lhs.origin) + <=> std::forward_as_tuple(rhs.line, rhs.column, rhs.origin); + } + + // operator<=> doesn't generate this because it's not defaulted. + constexpr friend bool operator==(Pos const & lhs, Pos const & rhs) = default; struct LinesIterator { using difference_type = size_t;