# Unreleased

These changes are part of the `develop` branch, but not of a release yet.

- Converting an rvalue container to JSON (`json j = std::move(vec);`, `json j = std::map<std::string, std::string>{...};`) now **moves** the elements instead of copying them (e.g., `std::vector<std::string>` with 100,000 strings: 4.7 ms to 2.3 ms). Two consequences: the source container is left in a valid but unspecified (moved-from) state, and if an exception is thrown during the conversion, the source may be partially moved-from, so the strong exception guarantee no longer holds for the source of an rvalue conversion (the JSON value itself is unaffected). Lvalues and `const` objects are still copied. See [`basic_json`](https://json.nlohmann.me/api/basic_json/basic_json/index.md).

## API changes

**Added (88 pages):**

- `basic_json`: [`as_base_class`](https://json.nlohmann.me/api/basic_json/as_base_class/index.md), [`format_as(basic_json)`](https://json.nlohmann.me/api/basic_json/format_as/index.md), [`from_bon8`](https://json.nlohmann.me/api/basic_json/from_bon8/index.md), [`merge_diff`](https://json.nlohmann.me/api/basic_json/merge_diff/index.md), [`basic_json>`](https://json.nlohmann.me/api/basic_json/std_formatter/index.md), [`to_bon8`](https://json.nlohmann.me/api/basic_json/to_bon8/index.md), [`with_t`](https://json.nlohmann.me/api/basic_json/with_t/index.md)
- `basic_json_document`: [(overview)](https://json.nlohmann.me/api/basic_json_document/index.md), [`accept`](https://json.nlohmann.me/api/basic_json_document/accept/index.md), [`basic_json_document`](https://json.nlohmann.me/api/basic_json_document/basic_json_document/index.md), [`erase`](https://json.nlohmann.me/api/basic_json_document/erase/index.md), [`insert`](https://json.nlohmann.me/api/basic_json_document/insert/index.md), [`is_discarded`](https://json.nlohmann.me/api/basic_json_document/is_discarded/index.md), [`load`](https://json.nlohmann.me/api/basic_json_document/load/index.md), [`memory_usage`](https://json.nlohmann.me/api/basic_json_document/memory_usage/index.md), [`node_count`](https://json.nlohmann.me/api/basic_json_document/node_count/index.md), [`owns_source`](https://json.nlohmann.me/api/basic_json_document/owns_source/index.md), [`parse`](https://json.nlohmann.me/api/basic_json_document/parse/index.md), [`parse_copy`](https://json.nlohmann.me/api/basic_json_document/parse_copy/index.md), [`push_back`](https://json.nlohmann.me/api/basic_json_document/push_back/index.md), [`read`](https://json.nlohmann.me/api/basic_json_document/read/index.md), [`root`](https://json.nlohmann.me/api/basic_json_document/root/index.md), [`save`](https://json.nlohmann.me/api/basic_json_document/save/index.md), [`set`](https://json.nlohmann.me/api/basic_json_document/set/index.md), [`shrink_to_fit`](https://json.nlohmann.me/api/basic_json_document/shrink_to_fit/index.md), [`source`](https://json.nlohmann.me/api/basic_json_document/source/index.md)
- `basic_json_view`: [(overview)](https://json.nlohmann.me/api/basic_json_view/index.md), [`at`](https://json.nlohmann.me/api/basic_json_view/at/index.md), [`back`](https://json.nlohmann.me/api/basic_json_view/back/index.md), [`basic_json_view`](https://json.nlohmann.me/api/basic_json_view/basic_json_view/index.md), [`begin`](https://json.nlohmann.me/api/basic_json_view/begin/index.md), [`cbegin`](https://json.nlohmann.me/api/basic_json_view/cbegin/index.md), [`cend`](https://json.nlohmann.me/api/basic_json_view/cend/index.md), [`contains`](https://json.nlohmann.me/api/basic_json_view/contains/index.md), [`count`](https://json.nlohmann.me/api/basic_json_view/count/index.md), [`dump`](https://json.nlohmann.me/api/basic_json_view/dump/index.md), [`empty`](https://json.nlohmann.me/api/basic_json_view/empty/index.md), [`end`](https://json.nlohmann.me/api/basic_json_view/end/index.md), [`find`](https://json.nlohmann.me/api/basic_json_view/find/index.md), [`front`](https://json.nlohmann.me/api/basic_json_view/front/index.md), [`get`](https://json.nlohmann.me/api/basic_json_view/get/index.md), [`get_string`](https://json.nlohmann.me/api/basic_json_view/get_string/index.md), [`get_to`](https://json.nlohmann.me/api/basic_json_view/get_to/index.md), [`is_array`](https://json.nlohmann.me/api/basic_json_view/is_array/index.md), [`is_binary`](https://json.nlohmann.me/api/basic_json_view/is_binary/index.md), [`is_boolean`](https://json.nlohmann.me/api/basic_json_view/is_boolean/index.md), [`is_discarded`](https://json.nlohmann.me/api/basic_json_view/is_discarded/index.md), [`is_null`](https://json.nlohmann.me/api/basic_json_view/is_null/index.md), [`is_number`](https://json.nlohmann.me/api/basic_json_view/is_number/index.md), [`is_number_float`](https://json.nlohmann.me/api/basic_json_view/is_number_float/index.md), [`is_number_integer`](https://json.nlohmann.me/api/basic_json_view/is_number_integer/index.md), [`is_number_unsigned`](https://json.nlohmann.me/api/basic_json_view/is_number_unsigned/index.md), [`is_object`](https://json.nlohmann.me/api/basic_json_view/is_object/index.md), [`is_primitive`](https://json.nlohmann.me/api/basic_json_view/is_primitive/index.md), [`is_string`](https://json.nlohmann.me/api/basic_json_view/is_string/index.md), [`is_structured`](https://json.nlohmann.me/api/basic_json_view/is_structured/index.md), [`items`](https://json.nlohmann.me/api/basic_json_view/items/index.md), [`materialize`](https://json.nlohmann.me/api/basic_json_view/materialize/index.md), [`number_format`](https://json.nlohmann.me/api/basic_json_view/number_format/index.md), [`number_token`](https://json.nlohmann.me/api/basic_json_view/number_token/index.md), [`operator[]`](https://json.nlohmann.me/api/basic_json_view/operator%5B%5D/index.md), [`operator==`](https://json.nlohmann.me/api/basic_json_view/operator_eq/index.md), [`operator<<`](https://json.nlohmann.me/api/basic_json_view/operator_ltlt/index.md), [`operator!=`](https://json.nlohmann.me/api/basic_json_view/operator_ne/index.md), [`size`](https://json.nlohmann.me/api/basic_json_view/size/index.md), [`source_offset`](https://json.nlohmann.me/api/basic_json_view/source_offset/index.md), [`type`](https://json.nlohmann.me/api/basic_json_view/type/index.md), [`type_name`](https://json.nlohmann.me/api/basic_json_view/type_name/index.md), [`value`](https://json.nlohmann.me/api/basic_json_view/value/index.md)
- `json_pointer`: [`front`](https://json.nlohmann.me/api/json_pointer/front/index.md), [`pop_front`](https://json.nlohmann.me/api/json_pointer/pop_front/index.md), [`push_front`](https://json.nlohmann.me/api/json_pointer/push_front/index.md)
- `macros`: [`JSON_BRACE_INIT_COPY_SEMANTICS`](https://json.nlohmann.me/api/macros/json_brace_init_copy_semantics/index.md), [`JSON_DELETE_DEPRECATED_FUNCTIONS`](https://json.nlohmann.me/api/macros/json_delete_deprecated_functions/index.md), [`JSON_DISABLE_STREAM_BULK_SCAN`](https://json.nlohmann.me/api/macros/json_disable_stream_bulk_scan/index.md), [`JSON_DISABLE_TUPLE_REFERENCE_CONVERSION`](https://json.nlohmann.me/api/macros/json_disable_tuple_reference_conversion/index.md), [`JSON_DISABLE_UNLOCKED_FILE_IO`](https://json.nlohmann.me/api/macros/json_disable_unlocked_file_io/index.md), [`JSON_HAS_RANGE_VIEW_CONVERSION`](https://json.nlohmann.me/api/macros/json_has_range_view_conversion/index.md), [`JSON_HAS_STD_FORMAT`](https://json.nlohmann.me/api/macros/json_has_std_format/index.md), [`JSON_NO_AUTOMATIC_UDLS`](https://json.nlohmann.me/api/macros/json_no_automatic_udls/index.md), [`JSON_NO_SIMD`](https://json.nlohmann.me/api/macros/json_no_simd/index.md), [`JSON_NO_THREAD_LOCAL`](https://json.nlohmann.me/api/macros/json_no_thread_local/index.md), [`JSON_PRECISE_STREAM_POSITION`](https://json.nlohmann.me/api/macros/json_precise_stream_position/index.md), [`JSON_STRICT_BINARY_UTF8`](https://json.nlohmann.me/api/macros/json_strict_binary_utf8/index.md), [`JSON_STRICT_NUL_HANDLING`](https://json.nlohmann.me/api/macros/json_strict_nul_handling/index.md), [`JSON_USE_OBJECTS_FOR_ENUM_KEYED_MAPS`](https://json.nlohmann.me/api/macros/json_use_objects_for_enum_keyed_maps/index.md), [`JSON_USE_SIMDUTF`](https://json.nlohmann.me/api/macros/json_use_simdutf/index.md), [`nlohmann_define_type_with_names`](https://json.nlohmann.me/api/macros/nlohmann_define_type_with_names/index.md)

**Changed:**

- [`operator>>(basic_json)`](https://json.nlohmann.me/api/operator_gtgt/index.md): Fixed a null pointer dereference for an `std::istream` without a stream buffer (now throws `parse_error.101`), and a crash (`std::terminate`) when `i` has `eofbit` in its exception mask, in version 3.13.0 unreleased.
- [`operator>>(basic_json)`](https://json.nlohmann.me/api/operator_gtgt/index.md): Changed to the strong exception safety guarantee in version 3.13.0 unreleased: `j` is no longer left with a partially parsed value if parsing throws.
- [`operator>>(basic_json)`](https://json.nlohmann.me/api/operator_gtgt/index.md): Scans the characters in the stream buffer of `i` in bulk in version 3.13.0 unreleased; the position of `i` after the call is unchanged ([`JSON_DISABLE_STREAM_BULK_SCAN`](https://json.nlohmann.me/api/macros/json_disable_stream_bulk_scan/index.md) restores reading one character at a time).
- [`operator""_json`](https://json.nlohmann.me/api/operator_literal_json/index.md): Added `char8_t*` overload in version 3.13.0 unreleased.
- [`operator""_json_pointer`](https://json.nlohmann.me/api/operator_literal_json_pointer/index.md): Added `char8_t*` overload in version 3.13.0 unreleased.
- [`ordered_map`](https://json.nlohmann.me/api/ordered_map/index.md): Changed in version 3.13.0 unreleased: growing the storage moves the mapped values instead of copying them.
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Added `ignore_trailing_commas` in version 3.13.0 unreleased.
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Parsing from an `std::istream` scans the characters in its stream buffer in bulk in version 3.13.0 unreleased ([`JSON_DISABLE_STREAM_BULK_SCAN`](https://json.nlohmann.me/api/macros/json_disable_stream_bulk_scan/index.md)).
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Parsing from a `FILE*` locks the file once instead of once per character in version 3.13.0 unreleased ([`JSON_DISABLE_UNLOCKED_FILE_IO`](https://json.nlohmann.me/api/macros/json_disable_unlocked_file_io/index.md)).
- [`basic_json::accept`](https://json.nlohmann.me/api/basic_json/accept/index.md): Ill-formed UTF-16 and UTF-32 input (a lone surrogate, a high surrogate that is not followed by its low surrogate, or a code point above `U+10FFFF`) is rejected in version 3.13.0 unreleased; before that, some such sequences were accepted or ended the input silently.
- [`basic_json::array_t`](https://json.nlohmann.me/api/basic_json/array_t/index.md): Made `capacity()` optional, so that array types such as `std::deque` can be used, in version 3.13.0 unreleased.
- [`basic_json::at`](https://json.nlohmann.me/api/basic_json/at/index.md): Overload 3: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::basic_json`](https://json.nlohmann.me/api/basic_json/basic_json/index.md): Overload 4: Explicit for different string types if `JSON_USE_IMPLICIT_CONVERSIONS` is `0` since version 3.13.0 unreleased.
- [`basic_json::basic_json`](https://json.nlohmann.me/api/basic_json/basic_json/index.md): Overload 7: Fixed in version 3.13.0 unreleased to also check the iterator range for binary values; before, a range that did not cover the whole value (such as `(end(), end())`) was accepted and the whole binary value was copied, unlike the other primitive types.
- [`basic_json::binary_t`](https://json.nlohmann.me/api/basic_json/binary_t/index.md): Fixed [`dump`](https://json.nlohmann.me/api/basic_json/dump/index.md), [`std::hash`](https://json.nlohmann.me/api/basic_json/std_hash/index.md), and [`to_ubjson`](https://json.nlohmann.me/api/basic_json/to_ubjson/index.md) for byte types that are not integers (e.g., `std::byte`) in version 3.13.0 unreleased.
- [`basic_json::clear`](https://json.nlohmann.me/api/basic_json/clear/index.md): Fixed in version 3.13.0 unreleased to also clear the subtype of a binary value; before, the subtype was left unchanged.
- [`basic_json::contains`](https://json.nlohmann.me/api/basic_json/contains/index.md): Overload 2: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::contains`](https://json.nlohmann.me/api/basic_json/contains/index.md): Overload 4: Deleted overloads for integral key types added in version 3.13.0 unreleased to reject such calls at compile time instead of causing undefined behavior at runtime.
- [`basic_json::count`](https://json.nlohmann.me/api/basic_json/count/index.md): Overload 2: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::count`](https://json.nlohmann.me/api/basic_json/count/index.md): Overload 3: Deleted overload for integral key types added in version 3.13.0 unreleased to reject such calls at compile time instead of causing undefined behavior at runtime.
- [`basic_json::dump`](https://json.nlohmann.me/api/basic_json/dump/index.md): Error handler `keep` added in version 3.13.0 unreleased.
- [`basic_json::dump`](https://json.nlohmann.me/api/basic_json/dump/index.md): Doubles are written with the shortest digits (Żmij instead of Grisu2) since version 3.13.0 unreleased; about 0.1% of doubles are written differently, most of them with fewer digits.
- [`basic_json::emplace`](https://json.nlohmann.me/api/basic_json/emplace/index.md): Fixed in version 3.13.0 unreleased: for [`ordered_json`](https://json.nlohmann.me/api/ordered_json/index.md), the value could previously only be passed as an rvalue; it can now also be passed as an lvalue or a `const` lvalue, matching the behavior of `json`.
- [`basic_json::erase`](https://json.nlohmann.me/api/basic_json/erase/index.md): Overload 4: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::error_handler_t`](https://json.nlohmann.me/api/basic_json/error_handler_t/index.md): Added `keep`, and made this enumeration apply to the binary readers and writers in addition to `dump`, in version 3.13.0 unreleased.
- [`basic_json::find`](https://json.nlohmann.me/api/basic_json/find/index.md): Overload 2: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::find`](https://json.nlohmann.me/api/basic_json/find/index.md): Overload 3: Deleted overloads for integral key types added in version 3.13.0 unreleased to reject such calls at compile time instead of causing undefined behavior at runtime.
- [`basic_json::from_bjdata`](https://json.nlohmann.me/api/basic_json/from_bjdata/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::from_bjdata`](https://json.nlohmann.me/api/basic_json/from_bjdata/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::from_bjdata`](https://json.nlohmann.me/api/basic_json/from_bjdata/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::from_bson`](https://json.nlohmann.me/api/basic_json/from_bson/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::from_bson`](https://json.nlohmann.me/api/basic_json/from_bson/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::from_bson`](https://json.nlohmann.me/api/basic_json/from_bson/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::from_cbor`](https://json.nlohmann.me/api/basic_json/from_cbor/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::from_cbor`](https://json.nlohmann.me/api/basic_json/from_cbor/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::from_cbor`](https://json.nlohmann.me/api/basic_json/from_cbor/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::from_msgpack`](https://json.nlohmann.me/api/basic_json/from_msgpack/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::from_msgpack`](https://json.nlohmann.me/api/basic_json/from_msgpack/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::from_msgpack`](https://json.nlohmann.me/api/basic_json/from_msgpack/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::from_ubjson`](https://json.nlohmann.me/api/basic_json/from_ubjson/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::from_ubjson`](https://json.nlohmann.me/api/basic_json/from_ubjson/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::from_ubjson`](https://json.nlohmann.me/api/basic_json/from_ubjson/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::get_to`](https://json.nlohmann.me/api/basic_json/get_to/index.md): Added a `static_assert` with a clear message for `const` arguments in version 3.13.0 unreleased.
- [`basic_json::insert`](https://json.nlohmann.me/api/basic_json/insert/index.md): Overload 4: Fixed in version 3.13.0 unreleased to copy the values before inserting; before, an `ilist` that referred to elements of the array being inserted into could insert wrong values, because the range insert could move from or shift an element before it was copied.
- [`basic_json::json_base_class_t`](https://json.nlohmann.me/api/basic_json/json_base_class_t/index.md): Made a public member type in version 3.13.0 unreleased; it was private before, so it could not be named outside the class.
- [`basic_json::merge_patch`](https://json.nlohmann.me/api/basic_json/merge_patch/index.md): Fixed use of freed or relocated memory when `apply_patch` is `*this` or refers to a value contained in `*this`, in version 3.13.0 unreleased.
- [`basic_json::number_unsigned_t`](https://json.nlohmann.me/api/basic_json/number_unsigned_t/index.md): Can be the same type as `number_integer_t` since version 3.13.0 unreleased.
- [`basic_json::object_comparator_t`](https://json.nlohmann.me/api/basic_json/object_comparator_t/index.md): Fixed the fallback to `default_object_comparator_t`, which previously failed to compile for object types without a `key_compare` member type, in version 3.13.0 unreleased.
- [`basic_json::object_t`](https://json.nlohmann.me/api/basic_json/object_t/index.md): Allowed object types whose `erase(iterator)` returns `void` in version 3.13.0 unreleased.
- [`basic_json::operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md): Overload 1: Fixed in version 3.13.0 unreleased to throw `std::length_error` instead of emptying the array and accessing it out of bounds when `idx` equals the maximum value of `size_type`.
- [`basic_json::operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md): Overload 1: A missing index in the const version is guarded by a runtime assertion since version 3.13.0 unreleased.
- [`basic_json::operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md): Overload 3: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/index.md): Overload 4: A missing array index in the const version is guarded by a runtime assertion since version 3.13.0 unreleased.
- [`basic_json::operator==`](https://json.nlohmann.me/api/basic_json/operator_eq/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator>=`](https://json.nlohmann.me/api/basic_json/operator_ge/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator>`](https://json.nlohmann.me/api/basic_json/operator_gt/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator<=`](https://json.nlohmann.me/api/basic_json/operator_le/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator<`](https://json.nlohmann.me/api/basic_json/operator_lt/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator!=`](https://json.nlohmann.me/api/basic_json/operator_ne/index.md): Overload 1: Changed in version 3.13.0 unreleased to remove special-casing for `NaN` and `discarded` values; `operator!=` now consistently means `!(a == b)`.
- [`basic_json::operator!=`](https://json.nlohmann.me/api/basic_json/operator_ne/index.md): Overload 1: Removed the C++20 member function in version 3.13.0 unreleased; since C++20, the compiler rewrites `a != b` using `operator==`.
- [`basic_json::operator!=`](https://json.nlohmann.me/api/basic_json/operator_ne/index.md): Overload 2: Changed in version 3.13.0 unreleased to remove special-casing for `NaN` and `discarded` values; `operator!=` now consistently means `!(a == b)`.
- [`basic_json::operator!=`](https://json.nlohmann.me/api/basic_json/operator_ne/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::operator<=>`](https://json.nlohmann.me/api/basic_json/operator_spaceship/index.md): Overload 2: Made conditionally `noexcept` in version 3.13.0 unreleased; before, a throwing conversion called `std::terminate`.
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Added `ignore_trailing_commas` in version 3.13.0 unreleased.
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Extended empty-input detection to also cover an `std::istream` without a stream buffer, and fixed a crash (`std::terminate`) when parsing from an `std::istream` with `eofbit` in its exception mask, in version 3.13.0 unreleased.
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Parsing from an `std::istream` scans the characters in its stream buffer in bulk in version 3.13.0 unreleased ([`JSON_DISABLE_STREAM_BULK_SCAN`](https://json.nlohmann.me/api/macros/json_disable_stream_bulk_scan/index.md) restores reading one character at a time).
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Parsing from a `FILE*` locks the file once instead of once per character in version 3.13.0 unreleased ([`JSON_DISABLE_UNLOCKED_FILE_IO`](https://json.nlohmann.me/api/macros/json_disable_unlocked_file_io/index.md) restores `std::fgetc`).
- [`basic_json::parse`](https://json.nlohmann.me/api/basic_json/parse/index.md): Ill-formed UTF-16 and UTF-32 input (a lone surrogate, a high surrogate that is not followed by its low surrogate, or a code point above `U+10FFFF`) is rejected with `parse_error.101` in version 3.13.0 unreleased; before that, some such sequences were accepted or ended the input silently.
- [`basic_json::parser_callback_t`](https://json.nlohmann.me/api/basic_json/parser_callback_t/index.md): Fixed in version 3.13.0 unreleased to also remove discarded values from a parent object; before, discarding an array or a value stored under an object key left a discarded member behind, which made the parse result serialize to invalid JSON.
- [`basic_json::parser_callback_t`](https://json.nlohmann.me/api/basic_json/parser_callback_t/index.md): Fixed in version 3.13.0 unreleased so that discarding an array or object at its start event also hides its content from the callback, as documented above; before, the callback was still called for the content, and the key of every member of a discarded object was kept in memory until the parse ended.
- [`basic_json::patch`](https://json.nlohmann.me/api/basic_json/patch/index.md): Added [`out_of_range.411`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range411) and stopped relying on an internal assertion when an "add" operation's target location has a non-object/non-array parent in version 3.13.0 unreleased.
- [`basic_json::patch`](https://json.nlohmann.me/api/basic_json/patch/index.md): This includes a `null` parent, which was previously silently converted to an object, in version 3.13.0 unreleased.
- [`basic_json::patch`](https://json.nlohmann.me/api/basic_json/patch/index.md): Added [`out_of_range.413`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range413) and stopped silently ignoring a "remove" operation whose target location has a non-object/non-array parent in version 3.13.0 unreleased.
- [`basic_json::patch`](https://json.nlohmann.me/api/basic_json/patch/index.md): Added [`out_of_range.414`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range414) and rejected a "move" operation whose "from" location is a proper prefix of its "path" location instead of silently producing a corrupted result in version 3.13.0 unreleased.
- [`basic_json::patch`](https://json.nlohmann.me/api/basic_json/patch/index.md): Throws [`parse_error.109`](https://json.nlohmann.me/home/exceptions/#jsonexceptionparse_error109) instead of [`out_of_range.404`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range404) for a one-character array index that is not a digit (e.g., `/x`) in version 3.13.0 unreleased, as it already did for longer ones.
- [`basic_json::patch_inplace`](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md): Added [`out_of_range.411`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range411) and stopped relying on an internal assertion when an "add" operation's target location has a non-object/non-array parent in version 3.13.0 unreleased.
- [`basic_json::patch_inplace`](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md): This includes a `null` parent, which was previously silently converted to an object, in version 3.13.0 unreleased.
- [`basic_json::patch_inplace`](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md): Added [`out_of_range.413`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range413) and stopped silently ignoring a "remove" operation whose target location has a non-object/non-array parent in version 3.13.0 unreleased.
- [`basic_json::patch_inplace`](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md): Added [`out_of_range.414`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range414) and rejected a "move" operation whose "from" location is a proper prefix of its "path" location instead of silently producing a corrupted result in version 3.13.0 unreleased.
- [`basic_json::patch_inplace`](https://json.nlohmann.me/api/basic_json/patch_inplace/index.md): Throws [`parse_error.109`](https://json.nlohmann.me/home/exceptions/#jsonexceptionparse_error109) instead of [`out_of_range.404`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range404) for a one-character array index that is not a digit (e.g., `/x`) in version 3.13.0 unreleased, as it already did for longer ones.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Added `ignore_trailing_commas` in version 3.13.0 unreleased.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Added `tag_handler` in version 3.13.0 unreleased.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0 unreleased.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0 unreleased.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): `JSON_PRECISE_STREAM_POSITION` added in version 3.13.0 unreleased to optionally leave a `std::istream` positioned right after the parsed value when `strict` is `false`.
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Parsing from an `std::istream` scans the characters in its stream buffer in bulk in version 3.13.0 unreleased ([`JSON_DISABLE_STREAM_BULK_SCAN`](https://json.nlohmann.me/api/macros/json_disable_stream_bulk_scan/index.md)).
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Parsing from a `FILE*` locks the file once instead of once per character in version 3.13.0 unreleased ([`JSON_DISABLE_UNLOCKED_FILE_IO`](https://json.nlohmann.me/api/macros/json_disable_unlocked_file_io/index.md)).
- [`basic_json::sax_parse`](https://json.nlohmann.me/api/basic_json/sax_parse/index.md): Ill-formed UTF-16 and UTF-32 input (a lone surrogate, a high surrogate that is not followed by its low surrogate, or a code point above `U+10FFFF`) is rejected with `parse_error.101` in version 3.13.0 unreleased; before that, some such sequences were accepted or ended the input silently.
- [`std::hash<nlohmann::basic_json>`](https://json.nlohmann.me/api/basic_json/std_hash/index.md): Numbers that compare equal hash equally since version 3.13.0 unreleased; before, `0`, `0U`, and `0.0` had different hash values.
- [`basic_json::string_t`](https://json.nlohmann.me/api/basic_json/string_t/index.md): Removed the requirement that `string_t` be implicitly convertible from `std::string`, which the BSON writer and the UBJSON reader relied on, in version 3.13.0 unreleased.
- [`basic_json::swap`](https://json.nlohmann.me/api/basic_json/swap/index.md): Overload 1: Exchanges the `json_base_class_t` subobject along with the value since version 3.13.0 unreleased.
- [`basic_json::swap`](https://json.nlohmann.me/api/basic_json/swap/index.md): Overload 2: Exchanges the `json_base_class_t` subobject along with the value since version 3.13.0 unreleased.
- [`basic_json::to_bjdata`](https://json.nlohmann.me/api/basic_json/to_bjdata/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::to_bjdata`](https://json.nlohmann.me/api/basic_json/to_bjdata/index.md): Throws `type_error.321` for a discarded value since version 3.13.0 unreleased; previously, a discarded value nested in an array or object was silently skipped, producing invalid BJData.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): Throws `out_of_range.412` and `out_of_range.415` since version 3.13.0 unreleased.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): Linear in the size of `j`, and no longer limited by the call stack for deeply nested values, since version 3.13.0 unreleased.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): `out_of_range.415` is now detected before anything is written, like the other exceptions above, since version 3.13.0 unreleased.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): Throws `type_error.321` for a discarded value nested in `j` since version 3.13.0 unreleased; previously, it was silently skipped, producing a document whose declared size did not match what was actually written.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::to_bson`](https://json.nlohmann.me/api/basic_json/to_bson/index.md): Throws `out_of_range.407` for integers that do not fit 64 bits since version 3.13.0 unreleased; previously, integers of a number type wider than 64 bits were silently truncated.
- [`basic_json::to_cbor`](https://json.nlohmann.me/api/basic_json/to_cbor/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::to_cbor`](https://json.nlohmann.me/api/basic_json/to_cbor/index.md): Throws `type_error.321` for a discarded value since version 3.13.0 unreleased; previously, a discarded value nested in an array or object was silently skipped, producing invalid CBOR.
- [`basic_json::to_cbor`](https://json.nlohmann.me/api/basic_json/to_cbor/index.md): Throws `out_of_range.407` for integers that do not fit 64 bits since version 3.13.0 unreleased; previously, integers of a number type wider than 64 bits were silently truncated.
- [`basic_json::to_msgpack`](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md): Throws `out_of_range.412` and `out_of_range.415` since version 3.13.0 unreleased.
- [`basic_json::to_msgpack`](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::to_msgpack`](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md): Fixed in version 3.13.0 unreleased to serialize `number_integer_t`/`number_unsigned_t` pairs of different width correctly; before, integers could be serialized with the wrong value if `number_integer_t` was narrower than `number_unsigned_t`.
- [`basic_json::to_msgpack`](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md): Throws `type_error.321` for a discarded value since version 3.13.0 unreleased; previously, a discarded value nested in an array or object was silently skipped, producing invalid MessagePack.
- [`basic_json::to_msgpack`](https://json.nlohmann.me/api/basic_json/to_msgpack/index.md): Throws `out_of_range.407` for integers that do not fit 64 bits since version 3.13.0 unreleased; previously, integers of a number type wider than 64 bits were silently truncated.
- [`basic_json::to_ubjson`](https://json.nlohmann.me/api/basic_json/to_ubjson/index.md): Added `error_handler` parameter in version 3.13.0 unreleased.
- [`basic_json::to_ubjson`](https://json.nlohmann.me/api/basic_json/to_ubjson/index.md): Throws `type_error.321` for a discarded value since version 3.13.0 unreleased; previously, a discarded value nested in an array or object was silently skipped, producing invalid UBJSON.
- [`basic_json::type_name`](https://json.nlohmann.me/api/basic_json/type_name/index.md): Added `"invalid"` return value for corrupted JSON values in version 3.13.0 unreleased.
- [`basic_json::unflatten`](https://json.nlohmann.me/api/basic_json/unflatten/index.md): Made the array/object decision independent of the object's iteration order in version 3.13.0 unreleased.
- [`basic_json::unflatten`](https://json.nlohmann.me/api/basic_json/unflatten/index.md): Throws [`parse_error.109`](https://json.nlohmann.me/home/exceptions/#jsonexceptionparse_error109) instead of [`out_of_range.404`](https://json.nlohmann.me/home/exceptions/#jsonexceptionout_of_range404) for a one-character array index that is not a digit (e.g., `/x`) in version 3.13.0 unreleased, as it already did for longer ones.
- [`basic_json::update`](https://json.nlohmann.me/api/basic_json/update/index.md): Fixed use of freed or relocated memory when the argument is `*this` or refers to a value contained in `*this`, in version 3.13.0 unreleased.
- [`basic_json::value`](https://json.nlohmann.me/api/basic_json/value/index.md): Overload 1: Deleted overload for integral key types added in version 3.13.0 unreleased to reject such calls at compile time instead of causing undefined behavior at runtime.
- [`basic_json::value`](https://json.nlohmann.me/api/basic_json/value/index.md): Overload 2: Support for keys convertible to `std::string_view` added in version 3.13.0 unreleased, consistently across the lookup functions.
- [`basic_json::value`](https://json.nlohmann.me/api/basic_json/value/index.md): Overload 3: Extended to work with arrays in version 3.13.0 unreleased.
- [`basic_json::value`](https://json.nlohmann.me/api/basic_json/value/index.md): Overload 3: Throws [`parse_error.109`](https://json.nlohmann.me/home/exceptions/#jsonexceptionparse_error109) instead of returning `default_value` for a one-character array index that is not a digit (e.g., `/x`) in version 3.13.0 unreleased, as it already did for longer ones.
- [`JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20, JSON_HAS_CPP_23, JSON_HAS_CPP_26`](https://json.nlohmann.me/api/macros/json_has_cpp_11/index.md): Added `JSON_HAS_CPP_26` in version 3.13.0 unreleased.
- [`JSON_HAS_RANGES`](https://json.nlohmann.me/api/macros/json_has_ranges/index.md): Added the exclusions for libstdc++ < 11, Clang < 16 with libstdc++, libc++ < 16, and nvcc (CUDA) 12.0.x and 12.1.x in version 3.13.0 unreleased.
- [`JSON_USE_IMPLICIT_CONVERSIONS`](https://json.nlohmann.me/api/macros/json_use_implicit_conversions/index.md): Also affects the conversion between `basic_json` specializations with different string types since version 3.13.0 unreleased.
- [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](https://json.nlohmann.me/api/macros/json_use_legacy_discarded_value_comparison/index.md): Fixed in version 3.13.0 unreleased so `<=` and `>=` also emulate the legacy behavior in C++20 when the JSON value is the right-hand operand of a scalar comparison; before, only the 3-way-comparison-rewritten candidate was found, which yielded `false` instead of `true`.
