✨ added overload for std::less<value_t> #486
MSVC needs this overload to compile code containing a std::map that uses nlohmann::detail::operator as key.
This commit is contained in:
parent
758c4addc1
commit
f4126e4dd8
3 changed files with 39 additions and 0 deletions
16
src/json.hpp
16
src/json.hpp
|
@ -13025,6 +13025,22 @@ struct hash<nlohmann::json>
|
|||
return h(j.dump());
|
||||
}
|
||||
};
|
||||
|
||||
/// specialization for std::less<value_t>
|
||||
template <>
|
||||
struct less<::nlohmann::detail::value_t>
|
||||
{
|
||||
/*!
|
||||
@brief compare two value_t enum values
|
||||
@since version 3.0.0
|
||||
*/
|
||||
bool operator()(nlohmann::detail::value_t lhs,
|
||||
nlohmann::detail::value_t rhs) const noexcept
|
||||
{
|
||||
return nlohmann::detail::operator<(lhs, rhs);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
/*!
|
||||
|
|
|
@ -12059,6 +12059,22 @@ struct hash<nlohmann::json>
|
|||
return h(j.dump());
|
||||
}
|
||||
};
|
||||
|
||||
/// specialization for std::less<value_t>
|
||||
template <>
|
||||
struct less<::nlohmann::detail::value_t>
|
||||
{
|
||||
/*!
|
||||
@brief compare two value_t enum values
|
||||
@since version 3.0.0
|
||||
*/
|
||||
bool operator()(nlohmann::detail::value_t lhs,
|
||||
nlohmann::detail::value_t rhs) const noexcept
|
||||
{
|
||||
return nlohmann::detail::operator<(lhs, rhs);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
/*!
|
||||
|
|
|
@ -795,4 +795,11 @@ TEST_CASE("regression tests")
|
|||
std::string s2 = j2.dump();
|
||||
CHECK(s1 == s2);
|
||||
}
|
||||
|
||||
SECTION("issue #486 - json::value_t can't be a map's key type in VC++ 2015")
|
||||
{
|
||||
// the code below must compile with MSVC
|
||||
std::map<json::value_t, std::string> jsonTypes ;
|
||||
jsonTypes[json::value_t::array] = "array";
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue