diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp index 3b3da50ff..5f86957ed 100644 --- a/include/nlohmann/json.hpp +++ b/include/nlohmann/json.hpp @@ -479,6 +479,9 @@ class basic_json AllocatorType>>; + using key_type = typename object_t::key_type; + using mapped_type = typename object_t::mapped_type; + /*! @brief a type for an array @@ -2993,7 +2996,7 @@ class basic_json @complexity Logarithmic in the size of the container. - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @@ -3003,7 +3006,7 @@ class basic_json written using `at()`. It also demonstrates the different exceptions that can be thrown.,at__object_t_key_type} */ - reference at(const typename object_t::key_type& key) + reference at(const key_type& key) { // at only works for objects if (JSON_LIKELY(is_object())) @@ -3044,7 +3047,7 @@ class basic_json @complexity Logarithmic in the size of the container. - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @@ -3054,7 +3057,7 @@ class basic_json `at()`. It also demonstrates the different exceptions that can be thrown., at__object_t_key_type_const} */ - const_reference at(const typename object_t::key_type& key) const + const_reference at(const key_type& key) const { // at only works for objects if (JSON_LIKELY(is_object())) @@ -3178,13 +3181,13 @@ class basic_json @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ - reference operator[](const typename object_t::key_type& key) + reference operator[](const key_type& key) { // implicitly convert null value to an empty object if (is_null()) @@ -3227,13 +3230,13 @@ class basic_json @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ - const_reference operator[](const typename object_t::key_type& key) const + const_reference operator[](const key_type& key) const { // const operator[] only works for objects if (JSON_LIKELY(is_object())) @@ -3266,7 +3269,7 @@ class basic_json @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @@ -3316,7 +3319,7 @@ class basic_json @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @@ -3350,10 +3353,10 @@ class basic_json } @endcode - @note Unlike @ref at(const typename object_t::key_type&), this function + @note Unlike @ref at(const key_type&), this function does not throw if the given key @a key was not found. - @note Unlike @ref operator[](const typename object_t::key_type& key), this + @note Unlike @ref operator[](const key_type& key), this function does not implicitly add an element to the position defined by @a key. This function is furthermore also applicable to const objects. @@ -3376,16 +3379,16 @@ class basic_json @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @since version 1.0.0 */ template::value, int>::type = 0> - ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + ValueType value(const key_type& key, const ValueType& default_value) const { // at only works for objects if (JSON_LIKELY(is_object())) @@ -3405,9 +3408,9 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const + @copydoc basic_json::value(const key_type&, const ValueType&) const */ - string_t value(const typename object_t::key_type& key, const char* default_value) const + string_t value(const key_type& key, const char* default_value) const { return value(key, string_t(default_value)); } @@ -3608,7 +3611,7 @@ class basic_json @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @@ -3713,7 +3716,7 @@ class basic_json types.,erase__IteratorType_IteratorType} @sa @ref erase(IteratorType) -- removes the element at a given position - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @@ -3811,7 +3814,7 @@ class basic_json @since version 1.0.0 */ - size_type erase(const typename object_t::key_type& key) + size_type erase(const key_type& key) { // this erase only works for objects if (JSON_LIKELY(is_object())) @@ -3841,7 +3844,7 @@ class basic_json @sa @ref erase(IteratorType) -- removes the element at a given position @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @since version 1.0.0 @@ -7145,7 +7148,7 @@ class basic_json Uses a JSON pointer to retrieve a reference to the respective JSON value. No bound checking is performed. Similar to @ref operator[](const typename - object_t::key_type&), `null` values are created in arrays and objects if + key_type&), `null` values are created in arrays and objects if necessary. In particular: diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index ef4b0cd0f..c8d38f598 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -12946,6 +12946,9 @@ class basic_json AllocatorType>>; + using key_type = typename object_t::key_type; + using mapped_type = typename object_t::mapped_type; + /*! @brief a type for an array @@ -15460,7 +15463,7 @@ class basic_json @complexity Logarithmic in the size of the container. - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @@ -15470,7 +15473,7 @@ class basic_json written using `at()`. It also demonstrates the different exceptions that can be thrown.,at__object_t_key_type} */ - reference at(const typename object_t::key_type& key) + reference at(const key_type& key) { // at only works for objects if (JSON_LIKELY(is_object())) @@ -15511,7 +15514,7 @@ class basic_json @complexity Logarithmic in the size of the container. - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @@ -15521,7 +15524,7 @@ class basic_json `at()`. It also demonstrates the different exceptions that can be thrown., at__object_t_key_type_const} */ - const_reference at(const typename object_t::key_type& key) const + const_reference at(const key_type& key) const { // at only works for objects if (JSON_LIKELY(is_object())) @@ -15645,13 +15648,13 @@ class basic_json @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ - reference operator[](const typename object_t::key_type& key) + reference operator[](const key_type& key) { // implicitly convert null value to an empty object if (is_null()) @@ -15694,13 +15697,13 @@ class basic_json @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ - const_reference operator[](const typename object_t::key_type& key) const + const_reference operator[](const key_type& key) const { // const operator[] only works for objects if (JSON_LIKELY(is_object())) @@ -15733,7 +15736,7 @@ class basic_json @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @@ -15783,7 +15786,7 @@ class basic_json @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @@ -15817,10 +15820,10 @@ class basic_json } @endcode - @note Unlike @ref at(const typename object_t::key_type&), this function + @note Unlike @ref at(const key_type&), this function does not throw if the given key @a key was not found. - @note Unlike @ref operator[](const typename object_t::key_type& key), this + @note Unlike @ref operator[](const key_type& key), this function does not implicitly add an element to the position defined by @a key. This function is furthermore also applicable to const objects. @@ -15843,16 +15846,16 @@ class basic_json @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value} - @sa @ref at(const typename object_t::key_type&) for access by reference + @sa @ref at(const key_type&) for access by reference with range checking - @sa @ref operator[](const typename object_t::key_type&) for unchecked + @sa @ref operator[](const key_type&) for unchecked access by reference @since version 1.0.0 */ template::value, int>::type = 0> - ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + ValueType value(const key_type& key, const ValueType& default_value) const { // at only works for objects if (JSON_LIKELY(is_object())) @@ -15872,9 +15875,9 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const + @copydoc basic_json::value(const key_type&, const ValueType&) const */ - string_t value(const typename object_t::key_type& key, const char* default_value) const + string_t value(const key_type& key, const char* default_value) const { return value(key, string_t(default_value)); } @@ -16075,7 +16078,7 @@ class basic_json @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @@ -16180,7 +16183,7 @@ class basic_json types.,erase__IteratorType_IteratorType} @sa @ref erase(IteratorType) -- removes the element at a given position - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @@ -16278,7 +16281,7 @@ class basic_json @since version 1.0.0 */ - size_type erase(const typename object_t::key_type& key) + size_type erase(const key_type& key) { // this erase only works for objects if (JSON_LIKELY(is_object())) @@ -16308,7 +16311,7 @@ class basic_json @sa @ref erase(IteratorType) -- removes the element at a given position @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range - @sa @ref erase(const typename object_t::key_type&) -- removes the element + @sa @ref erase(const key_type&) -- removes the element from an object at the given key @since version 1.0.0 @@ -19612,7 +19615,7 @@ class basic_json Uses a JSON pointer to retrieve a reference to the respective JSON value. No bound checking is performed. Similar to @ref operator[](const typename - object_t::key_type&), `null` values are created in arrays and objects if + key_type&), `null` values are created in arrays and objects if necessary. In particular: