$NetBSD: patch-include_nlohmann_detail_conversions_to__json.hpp,v 1.1 2025/04/27 20:07:25 wiz Exp $ https://github.com/nlohmann/json/pull/4736 --- include/nlohmann/detail/conversions/to_json.hpp.orig 2025-04-11 08:42:28.000000000 +0000 +++ include/nlohmann/detail/conversions/to_json.hpp @@ -15,7 +15,8 @@ #include // copy #include // begin, end -#include // string +#include // allocator_traits +#include // basic_string, char_traits #include // tuple, get #include // is_same, is_constructible, is_floating_point, is_enum, underlying_type #include // move, forward, declval, pair @@ -440,15 +441,21 @@ inline void to_json(BasicJsonType& j, co } #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +#if defined(__cpp_lib_char8_t) +template +inline void to_json(BasicJsonType& j, const std::basic_string& s) +{ + using OtherAllocator = typename std::allocator_traits::template rebind_alloc; + j = std::basic_string, OtherAllocator>(s.begin(), s.end(), s.get_allocator()); +} +#endif + template inline void to_json(BasicJsonType& j, const std_fs::path& p) { -#ifdef JSON_HAS_CPP_20 - const std::u8string s = p.u8string(); - j = std::string(s.begin(), s.end()); -#else - j = p.u8string(); // returns std::string in C++17 -#endif + // Returns either a std::string or a std::u8string depending whether library + // support for char8_t is enabled. + j = p.u8string(); } #endif