From 28dbe4e6515f4160184bf9d19496fa5682d0b2fc Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 12 Mar 2017 13:49:39 +0100 Subject: [PATCH] :memo: overworked documentation for the at functions Added all possible exceptions to the examples of the at functions. --- doc/examples/at__object_t_key_type | Bin 130960 -> 0 bytes doc/examples/at__object_t_key_type.cpp | 16 ++- doc/examples/at__object_t_key_type.link | 2 +- doc/examples/at__object_t_key_type.output | 1 + doc/examples/at__object_t_key_type_const.cpp | 16 ++- doc/examples/at__object_t_key_type_const.link | 2 +- .../at__object_t_key_type_const.output | 1 + doc/examples/at__size_type.cpp | 16 ++- doc/examples/at__size_type.link | 2 +- doc/examples/at__size_type.output | 1 + doc/examples/at__size_type_const.cpp | 20 +++- doc/examples/at__size_type_const.link | 2 +- doc/examples/at__size_type_const.output | 1 + doc/examples/at_json_pointer.cpp | 50 ++++++++- doc/examples/at_json_pointer.link | 2 +- doc/examples/at_json_pointer.output | 4 + doc/examples/at_json_pointer_const.cpp | 40 ++++++- doc/examples/at_json_pointer_const.link | 2 +- doc/examples/at_json_pointer_const.output | 3 + src/json.hpp | 104 +++++++++++------- src/json.hpp.re2c | 104 +++++++++++------- 21 files changed, 296 insertions(+), 93 deletions(-) delete mode 100755 doc/examples/at__object_t_key_type diff --git a/doc/examples/at__object_t_key_type b/doc/examples/at__object_t_key_type deleted file mode 100755 index 03f48e68ca3efe94e36855f9d69bd72b6854b4ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130960 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 JywMTA{}1@W;O+nb diff --git a/doc/examples/at__object_t_key_type.cpp b/doc/examples/at__object_t_key_type.cpp index a66bd9a3..7797418f 100644 --- a/doc/examples/at__object_t_key_type.cpp +++ b/doc/examples/at__object_t_key_type.cpp @@ -21,9 +21,23 @@ int main() // output changed array std::cout << object << '\n'; - // try to write at a nonexisting key + + // exception type_error.304 try { + // use at() on a non-object type + json str = "I am a string"; + str.at("the good") = "Another string"; + } + catch (json::type_error& e) + { + std::cout << e.what() << '\n'; + } + + // exception out_of_range.401 + try + { + // try to write at a nonexisting key object.at("the fast") = "il rapido"; } catch (json::out_of_range& e) diff --git a/doc/examples/at__object_t_key_type.link b/doc/examples/at__object_t_key_type.link index 1cb99d46..8874783b 100644 --- a/doc/examples/at__object_t_key_type.link +++ b/doc/examples/at__object_t_key_type.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at__object_t_key_type.output b/doc/examples/at__object_t_key_type.output index 654b9eb6..b544b729 100644 --- a/doc/examples/at__object_t_key_type.output +++ b/doc/examples/at__object_t_key_type.output @@ -1,3 +1,4 @@ "il brutto" {"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"} +[json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.403] key 'the fast' not found diff --git a/doc/examples/at__object_t_key_type_const.cpp b/doc/examples/at__object_t_key_type_const.cpp index 99eb6f01..f6042404 100644 --- a/doc/examples/at__object_t_key_type_const.cpp +++ b/doc/examples/at__object_t_key_type_const.cpp @@ -15,9 +15,23 @@ int main() // output element with key "the ugly" std::cout << object.at("the ugly") << '\n'; - // try to read from a nonexisting key + + // exception type_error.304 try { + // use at() on a non-object type + const json str = "I am a string"; + std::cout << str.at("the good") << '\n'; + } + catch (json::type_error& e) + { + std::cout << e.what() << '\n'; + } + + // exception out_of_range.401 + try + { + // try to read from a nonexisting key std::cout << object.at("the fast") << '\n'; } catch (json::out_of_range) diff --git a/doc/examples/at__object_t_key_type_const.link b/doc/examples/at__object_t_key_type_const.link index a07dbd59..cd8594e6 100644 --- a/doc/examples/at__object_t_key_type_const.link +++ b/doc/examples/at__object_t_key_type_const.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at__object_t_key_type_const.output b/doc/examples/at__object_t_key_type_const.output index b3dd11d3..40ca3f09 100644 --- a/doc/examples/at__object_t_key_type_const.output +++ b/doc/examples/at__object_t_key_type_const.output @@ -1,2 +1,3 @@ "il brutto" +[json.exception.type_error.304] cannot use at() with string out of range diff --git a/doc/examples/at__size_type.cpp b/doc/examples/at__size_type.cpp index 07e363ab..28def1dd 100644 --- a/doc/examples/at__size_type.cpp +++ b/doc/examples/at__size_type.cpp @@ -16,9 +16,23 @@ int main() // output changed array std::cout << array << '\n'; - // try to write beyond the array limit + + // exception type_error.304 try { + // use at() on a non-array type + json str = "I am a string"; + str.at(0) = "Another string"; + } + catch (json::type_error& e) + { + std::cout << e.what() << '\n'; + } + + // exception out_of_range.401 + try + { + // try to write beyond the array limit array.at(5) = "sixth"; } catch (json::out_of_range& e) diff --git a/doc/examples/at__size_type.link b/doc/examples/at__size_type.link index 78ec0ca0..cba0fa00 100644 --- a/doc/examples/at__size_type.link +++ b/doc/examples/at__size_type.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at__size_type.output b/doc/examples/at__size_type.output index 4f0c9e54..54026436 100644 --- a/doc/examples/at__size_type.output +++ b/doc/examples/at__size_type.output @@ -1,3 +1,4 @@ "third" ["first","second","third","fourth"] +[json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.401] array index 5 is out of range diff --git a/doc/examples/at__size_type_const.cpp b/doc/examples/at__size_type_const.cpp index 88d28be6..213d22fd 100644 --- a/doc/examples/at__size_type_const.cpp +++ b/doc/examples/at__size_type_const.cpp @@ -5,17 +5,31 @@ using json = nlohmann::json; int main() { // create JSON array - json array = {"first", "2nd", "third", "fourth"}; + const json array = {"first", "2nd", "third", "fourth"}; // output element at index 2 (third element) std::cout << array.at(2) << '\n'; - // try to read beyond the array limit + + // exception type_error.304 try { + // use at() on a non-array type + const json str = "I am a string"; + std::cout << str.at(0) << '\n'; + } + catch (json::type_error& e) + { + std::cout << e.what() << '\n'; + } + + // exception out_of_range.401 + try + { + // try to read beyond the array limit std::cout << array.at(5) << '\n'; } - catch (const json::out_of_range& e) + catch (json::out_of_range& e) { std::cout << e.what() << '\n'; } diff --git a/doc/examples/at__size_type_const.link b/doc/examples/at__size_type_const.link index c703c5d9..ce3647ac 100644 --- a/doc/examples/at__size_type_const.link +++ b/doc/examples/at__size_type_const.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at__size_type_const.output b/doc/examples/at__size_type_const.output index e52b6cc0..8135a27a 100644 --- a/doc/examples/at__size_type_const.output +++ b/doc/examples/at__size_type_const.output @@ -1,2 +1,3 @@ "third" +[json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.401] array index 5 is out of range diff --git a/doc/examples/at_json_pointer.cpp b/doc/examples/at_json_pointer.cpp index 6d1617e6..3ef91282 100644 --- a/doc/examples/at_json_pointer.cpp +++ b/doc/examples/at_json_pointer.cpp @@ -33,10 +33,56 @@ int main() // output the changed array std::cout << j["array"] << '\n'; - // try to use an invalid JSON pointer + + // out_of_range.106 try { - auto ref = j.at("/number/foo"_json_pointer); + // try to use an array index with leading '0' + json::reference ref = j.at("/array/01"_json_pointer); + } + catch (json::parse_error& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.109 + try + { + // try to use an array index that is not a number + json::reference ref = j.at("/array/one"_json_pointer); + } + catch (json::parse_error& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.401 + try + { + // try to use a an invalid array index + json::reference ref = j.at("/array/4"_json_pointer); + } + catch (json::out_of_range& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.402 + try + { + // try to use the array index '-' + json::reference ref = j.at("/array/-"_json_pointer); + } + catch (json::out_of_range& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.404 + try + { + // try to use a JSON pointer that cannot be resolved + json::reference ref = j.at("/number/foo"_json_pointer); } catch (json::out_of_range& e) { diff --git a/doc/examples/at_json_pointer.link b/doc/examples/at_json_pointer.link index 45402303..c8563ec2 100644 --- a/doc/examples/at_json_pointer.link +++ b/doc/examples/at_json_pointer.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at_json_pointer.output b/doc/examples/at_json_pointer.output index a45737ad..505792f2 100644 --- a/doc/examples/at_json_pointer.output +++ b/doc/examples/at_json_pointer.output @@ -4,4 +4,8 @@ 2 "bar" [1,21] +[json.exception.parse_error.106] parse error: array index '01' must not begin with '0' +[json.exception.parse_error.109] parse error: array index 'one' is not a number +[json.exception.out_of_range.401] array index 4 is out of range +[json.exception.out_of_range.402] array index '-' (2) is out of range [json.exception.out_of_range.404] unresolved reference token 'foo' diff --git a/doc/examples/at_json_pointer_const.cpp b/doc/examples/at_json_pointer_const.cpp index dab1b39c..a1d065f2 100644 --- a/doc/examples/at_json_pointer_const.cpp +++ b/doc/examples/at_json_pointer_const.cpp @@ -5,7 +5,7 @@ using json = nlohmann::json; int main() { // create a JSON value - json j = + const json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; @@ -21,10 +21,44 @@ int main() // output element with JSON pointer "/array/1" std::cout << j.at("/array/1"_json_pointer) << '\n'; - // try to use an invalid JSON pointer + // out_of_range.109 try { - auto ref = j.at("/number/foo"_json_pointer); + // try to use an array index that is not a number + json::const_reference ref = j.at("/array/one"_json_pointer); + } + catch (json::parse_error& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.401 + try + { + // try to use a an invalid array index + json::const_reference ref = j.at("/array/4"_json_pointer); + } + catch (json::out_of_range& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.402 + try + { + // try to use the array index '-' + json::const_reference ref = j.at("/array/-"_json_pointer); + } + catch (json::out_of_range& e) + { + std::cout << e.what() << '\n'; + } + + // out_of_range.404 + try + { + // try to use a JSON pointer that cannot be resolved + json::const_reference ref = j.at("/number/foo"_json_pointer); } catch (json::out_of_range& e) { diff --git a/doc/examples/at_json_pointer_const.link b/doc/examples/at_json_pointer_const.link index 70e7cf86..f421faf4 100644 --- a/doc/examples/at_json_pointer_const.link +++ b/doc/examples/at_json_pointer_const.link @@ -1 +1 @@ -online \ No newline at end of file +online \ No newline at end of file diff --git a/doc/examples/at_json_pointer_const.output b/doc/examples/at_json_pointer_const.output index 21712e86..b3361f04 100644 --- a/doc/examples/at_json_pointer_const.output +++ b/doc/examples/at_json_pointer_const.output @@ -2,4 +2,7 @@ "foo" [1,2] 2 +[json.exception.parse_error.109] parse error: array index 'one' is not a number +[json.exception.out_of_range.401] array index 4 is out of range +[json.exception.out_of_range.402] array index '-' (2) is out of range [json.exception.out_of_range.404] unresolved reference token 'foo' diff --git a/src/json.hpp b/src/json.hpp index 605d6aa5..7f31377f 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -3723,16 +3723,20 @@ class basic_json @return reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. + calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`; see example below. + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Constant. - @liveexample{The example below shows how array elements can be read and - written using `at()`.,at__size_type} - @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__size_type} */ reference at(size_type idx) { @@ -3766,16 +3770,20 @@ class basic_json @return const reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. + calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`; see example below. + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Constant. - @liveexample{The example below shows how array elements can be read using - `at()`.,at__size_type_const} - @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__size_type_const} */ const_reference at(size_type idx) const { @@ -3809,20 +3817,24 @@ class basic_json @return reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. + calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`; see example below. + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Logarithmic in the size of the container. - @liveexample{The example below shows how object elements can be read and - written using `at()`.,at__object_t_key_type} - @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read and + 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) { @@ -3856,20 +3868,24 @@ class basic_json @return const reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. + calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`; see example below. + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Logarithmic in the size of the container. - @liveexample{The example below shows how object elements can be read using - `at()`.,at__object_t_key_type_const} - @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read using + `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 { @@ -12791,24 +12807,30 @@ basic_json_parser_74: @return reference to the element pointed to by @a ptr - @complexity Constant. - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0' + begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number + is not a number. See example below. - @throw out_of_range.402 if the array index `-` is used in the passed JSON + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index `-` is always invalid. + implicitly inserted), the index '-' is always invalid. See example below. - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved; - see example below. + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. - @liveexample{The behavior is shown in the example.,at_json_pointer} + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer} */ reference at(const json_pointer& ptr) { @@ -12825,24 +12847,30 @@ basic_json_parser_74: @return reference to the element pointed to by @a ptr - @complexity Constant. - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0' + begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number + is not a number. See example below. - @throw out_of_range.402 if the array index `-` is used in the passed JSON + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index `-` is always invalid. + implicitly inserted), the index '-' is always invalid. See example below. - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved; - see example below. + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. - @liveexample{The behavior is shown in the example.,at_json_pointer_const} + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer_const} */ const_reference at(const json_pointer& ptr) const { diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 2bd2fd76..48111521 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -3723,16 +3723,20 @@ class basic_json @return reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. + calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`; see example below. + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Constant. - @liveexample{The example below shows how array elements can be read and - written using `at()`.,at__size_type} - @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__size_type} */ reference at(size_type idx) { @@ -3766,16 +3770,20 @@ class basic_json @return const reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, - calling `at` with an index makes no sense. + calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; - that is, `idx >= size()`; see example below. + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Constant. - @liveexample{The example below shows how array elements can be read using - `at()`.,at__size_type_const} - @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__size_type_const} */ const_reference at(size_type idx) const { @@ -3809,20 +3817,24 @@ class basic_json @return reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. + calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`; see example below. + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Logarithmic in the size of the container. - @liveexample{The example below shows how object elements can be read and - written using `at()`.,at__object_t_key_type} - @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read and + 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) { @@ -3856,20 +3868,24 @@ class basic_json @return const reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, - calling `at` with a key makes no sense. + calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; - that is, `find(key) == end()`; see example below. + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. @complexity Logarithmic in the size of the container. - @liveexample{The example below shows how object elements can be read using - `at()`.,at__object_t_key_type_const} - @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read using + `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 { @@ -11824,24 +11840,30 @@ class basic_json @return reference to the element pointed to by @a ptr - @complexity Constant. - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0' + begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number + is not a number. See example below. - @throw out_of_range.402 if the array index `-` is used in the passed JSON + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index `-` is always invalid. + implicitly inserted), the index '-' is always invalid. See example below. - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved; - see example below. + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. - @liveexample{The behavior is shown in the example.,at_json_pointer} + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer} */ reference at(const json_pointer& ptr) { @@ -11858,24 +11880,30 @@ class basic_json @return reference to the element pointed to by @a ptr - @complexity Constant. - @throw parse_error.106 if an array index in the passed JSON pointer @a ptr - begins with '0' + begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr - is not a number + is not a number. See example below. - @throw out_of_range.402 if the array index `-` is used in the passed JSON + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are - implicitly inserted), the index `-` is always invalid. + implicitly inserted), the index '-' is always invalid. See example below. - @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved; - see example below. + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. - @liveexample{The behavior is shown in the example.,at_json_pointer_const} + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer_const} */ const_reference at(const json_pointer& ptr) const {