diff --git a/single_include/toml.hpp b/single_include/toml.hpp index 6475e7c..9f88170 100644 --- a/single_include/toml.hpp +++ b/single_include/toml.hpp @@ -3152,8 +3152,11 @@ TOML11_INLINE std::ostream& white (std::ostream& os) #ifndef TOML11_SPEC_HPP #define TOML11_SPEC_HPP +#include +#include #include #include +#include #include @@ -3268,6 +3271,51 @@ struct spec bool ext_null_value; // allow `null` as a value }; +namespace detail +{ +inline std::pair> +to_tuple(const spec& s) noexcept +{ + return std::make_pair(std::cref(s.version), std::array{{ + s.v1_1_0_allow_control_characters_in_comments, + s.v1_1_0_allow_newlines_in_inline_tables, + s.v1_1_0_allow_trailing_comma_in_inline_tables, + s.v1_1_0_allow_non_english_in_bare_keys, + s.v1_1_0_add_escape_sequence_e, + s.v1_1_0_add_escape_sequence_x, + s.v1_1_0_make_seconds_optional, + s.ext_hex_float, + s.ext_num_suffix, + s.ext_null_value + }}); +} +} // detail + +inline bool operator==(const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) == detail::to_tuple(rhs); +} +inline bool operator!=(const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) != detail::to_tuple(rhs); +} +inline bool operator< (const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) < detail::to_tuple(rhs); +} +inline bool operator<=(const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) <= detail::to_tuple(rhs); +} +inline bool operator> (const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) > detail::to_tuple(rhs); +} +inline bool operator>=(const spec& lhs, const spec& rhs) noexcept +{ + return detail::to_tuple(lhs) >= detail::to_tuple(rhs); +} + } // namespace toml #endif // TOML11_SPEC_HPP #ifndef TOML11_ORDERED_MAP_HPP