diff --git a/include/nlohmann/detail/input/lexer.hpp b/include/nlohmann/detail/input/lexer.hpp index 75001652..ea116093 100644 --- a/include/nlohmann/detail/input/lexer.hpp +++ b/include/nlohmann/detail/input/lexer.hpp @@ -1130,7 +1130,7 @@ scan_number_done: } /// return current string value (implicitly resets the token; useful only once) - std::string move_string() + std::string&& move_string() { return std::move(token_buffer); } diff --git a/include/nlohmann/detail/input/parser.hpp b/include/nlohmann/detail/input/parser.hpp index 63e8541f..58d42bbe 100644 --- a/include/nlohmann/detail/input/parser.hpp +++ b/include/nlohmann/detail/input/parser.hpp @@ -403,6 +403,7 @@ class parser if (keep and callback and not callback(depth, parse_event_t::value, result)) { + result.m_value.destroy(result.m_type); result.m_type = value_t::discarded; } } diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp index 91de782f..70f26747 100644 --- a/include/nlohmann/json.hpp +++ b/include/nlohmann/json.hpp @@ -953,7 +953,7 @@ class basic_json /// constructor for rvalue strings json_value(string_t&& value) { - string = create(std::move(value)); + string = create(std::forward < string_t&& > (value)); } /// constructor for objects @@ -965,7 +965,7 @@ class basic_json /// constructor for rvalue objects json_value(object_t&& value) { - object = create(std::move(value)); + object = create(std::forward < object_t&& > (value)); } /// constructor for arrays @@ -977,7 +977,7 @@ class basic_json /// constructor for rvalue arrays json_value(array_t&& value) { - array = create(std::move(value)); + array = create(std::forward < array_t&& > (value)); } void destroy(value_t t) noexcept diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 5ef88282..8726ccd8 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -2969,7 +2969,7 @@ scan_number_done: } /// return current string value (implicitly resets the token; useful only once) - std::string move_string() + std::string&& move_string() { return std::move(token_buffer); } @@ -3526,6 +3526,7 @@ class parser if (keep and callback and not callback(depth, parse_event_t::value, result)) { + result.m_value.destroy(result.m_type); result.m_type = value_t::discarded; } } @@ -10561,7 +10562,7 @@ class basic_json /// constructor for rvalue strings json_value(string_t&& value) { - string = create(std::move(value)); + string = create(std::forward < string_t&& > (value)); } /// constructor for objects @@ -10573,7 +10574,7 @@ class basic_json /// constructor for rvalue objects json_value(object_t&& value) { - object = create(std::move(value)); + object = create(std::forward < object_t&& > (value)); } /// constructor for arrays @@ -10585,7 +10586,7 @@ class basic_json /// constructor for rvalue arrays json_value(array_t&& value) { - array = create(std::move(value)); + array = create(std::forward < array_t&& > (value)); } void destroy(value_t t) noexcept