Fix <=> comparison

master
Clyne 4 years ago committed by GitHub
parent 3a504f8682
commit ca2bee015b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -15,6 +15,7 @@
#endif
#include <concepts> // std::integral, std::floating_point
#include <compare> // std::strong_ordering
namespace ini_config {
@ -292,9 +293,15 @@ public:
get_next();
return copy;
}
// BUG: iter < end() == false at element before end()
constexpr auto operator<=>(const iterator& other) const noexcept {
return m_pos <=> other.m_pos;
if (auto poscomp = m_pos <=> other.m_pos; poscomp != 0)
return poscomp;
if (m_current.first == nullptr)
return std::strong_ordering::greater;
else if (other.m_current.first == nullptr)
return std::strong_ordering::less;
else
return m_current.first <=> other.m_current.first;
}
constexpr bool operator==(const iterator& other) const noexcept {
return m_pos == other.m_pos && m_current.first == other.m_current.first;

Loading…
Cancel
Save