From: clyne Date: Sat, 6 Feb 2021 16:26:19 +0000 (-0500) Subject: Fix <=> comparison X-Git-Url: https://code.bitgloo.com/?a=commitdiff_plain;h=ca2bee015b1653a0b7b486c351f3cd9a00d692d7;p=clyne%2Fini-config.git Fix <=> comparison --- diff --git a/ini_config.hpp b/ini_config.hpp index 9719bd2..59d779c 100644 --- a/ini_config.hpp +++ b/ini_config.hpp @@ -15,6 +15,7 @@ #endif #include // std::integral, std::floating_point +#include // 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;