From 772bb3cc209ecffc17a1a530842d219431734dfd Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 10 Dec 2017 12:32:20 +0100 Subject: [PATCH] :memo: fixing documentation #867 The example in the documentation on how to "force" an array of arrays was wrong since the first release. Fixed the documentation and added checks for the README unit tests. --- README.md | 2 +- src/json.hpp | 12 ++++++------ test/src/unit-readme.cpp | 9 ++++++++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6e13bfdc33..c4d9f733b8 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ json empty_object_implicit = json({}); json empty_object_explicit = json::object(); // a way to express an _array_ of key/value pairs [["currency", "USD"], ["value", 42.99]] -json array_not_object = { json::array({"currency", "USD"}), json::array({"value", 42.99}) }; +json array_not_object = json::array({ {"currency", "USD"}, {"value", 42.99} }); ``` diff --git a/src/json.hpp b/src/json.hpp index 23d420547d..e0466b6856 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -3646,12 +3646,12 @@ class iter_impl public: - /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. - /// The C++ Standard has never required user-defined iterators to derive from std::iterator. - /// A user-defined iterator should provide publicly accessible typedefs named - /// iterator_category, value_type, difference_type, pointer, and reference. - /// Note that value_type is required to be non-const, even for constant iterators. - using iterator_category = std::bidirectional_iterator_tag; + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; /// the type of the values when the iterator is dereferenced using value_type = typename BasicJsonType::value_type; diff --git a/test/src/unit-readme.cpp b/test/src/unit-readme.cpp index bc1597751f..1ce6ee1dcf 100644 --- a/test/src/unit-readme.cpp +++ b/test/src/unit-readme.cpp @@ -100,13 +100,20 @@ TEST_CASE("README", "[hide]") { // ways to express the empty array [] json empty_array_implicit = {{}}; + CHECK(empty_array_implicit.is_array()); json empty_array_explicit = json::array(); + CHECK(empty_array_explicit.is_array()); // a way to express the empty object {} json empty_object_explicit = json::object(); + CHECK(empty_object_explicit.is_object()); // a way to express an _array_ of key/value pairs [["currency", "USD"], ["value", 42.99]] - json array_not_object = { json::array({"currency", "USD"}), json::array({"value", 42.99}) }; + json array_not_object = json::array({ {"currency", "USD"}, {"value", 42.99} }); + CHECK(array_not_object.is_array()); + CHECK(array_not_object.size() == 2); + CHECK(array_not_object[0].is_array()); + CHECK(array_not_object[1].is_array()); } {