diff --git a/include/nlohmann/detail/output/serializer.hpp b/include/nlohmann/detail/output/serializer.hpp index 84a9c370d..8650694c0 100644 --- a/include/nlohmann/detail/output/serializer.hpp +++ b/include/nlohmann/detail/output/serializer.hpp @@ -850,11 +850,16 @@ class serializer // for the scan. Without it, text whose characters all have to be // escaped - CJK under ensure_ascii, where every byte is >= 0x80 - // runs the scanner once per character only to be told zero. - const std::size_t run = EnsureAscii - ? (is_ascii_copyable(data[i]) - ? find_ascii_copyable_run(data + i, s.size() - i) - : 0) - : string_bulk_run(data + i, s.size() - i); + const std::size_t run = [&]() -> std::size_t + { + if (EnsureAscii) + { + return is_ascii_copyable(data[i]) + ? find_ascii_copyable_run(data + i, s.size() - i) + : 0; + } + return string_bulk_run(data + i, s.size() - i); + }(); if (run != 0) { // emit any bytes still pending in string_buffer first to diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 0d99e22ab..4d1911295 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -21910,11 +21910,16 @@ class serializer // for the scan. Without it, text whose characters all have to be // escaped - CJK under ensure_ascii, where every byte is >= 0x80 - // runs the scanner once per character only to be told zero. - const std::size_t run = EnsureAscii - ? (is_ascii_copyable(data[i]) - ? find_ascii_copyable_run(data + i, s.size() - i) - : 0) - : string_bulk_run(data + i, s.size() - i); + const std::size_t run = [&]() -> std::size_t + { + if (EnsureAscii) + { + return is_ascii_copyable(data[i]) + ? find_ascii_copyable_run(data + i, s.size() - i) + : 0; + } + return string_bulk_run(data + i, s.size() - i); + }(); if (run != 0) { // emit any bytes still pending in string_buffer first to