aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ini_config.hpp11
1 files changed, 9 insertions, 2 deletions
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 <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;