diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp index a245e88fd..3dafb1b81 100644 --- a/include/nlohmann/detail/input/binary_reader.hpp +++ b/include/nlohmann/detail/input/binary_reader.hpp @@ -71,7 +71,7 @@ class binary_reader @param[in] adapter input adapter to read from */ - explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) + explicit binary_reader(InputAdapterType&& adapter) noexcept : ia(std::move(adapter)) { (void)detail::is_sax_static_asserts {}; } diff --git a/include/nlohmann/detail/input/input_adapters.hpp b/include/nlohmann/detail/input/input_adapters.hpp index cb050b1d2..9007d224b 100644 --- a/include/nlohmann/detail/input/input_adapters.hpp +++ b/include/nlohmann/detail/input/input_adapters.hpp @@ -42,7 +42,7 @@ class file_input_adapter // make class move-only file_input_adapter(const file_input_adapter&) = delete; - file_input_adapter(file_input_adapter&&) = default; + file_input_adapter(file_input_adapter&&) noexcept = default; file_input_adapter& operator=(const file_input_adapter&) = delete; file_input_adapter& operator=(file_input_adapter&&) = delete; @@ -88,9 +88,10 @@ class input_stream_adapter // delete because of pointer members input_stream_adapter(const input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; - input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) { rhs.is = nullptr; rhs.sb = nullptr; @@ -125,7 +126,8 @@ class iterator_input_adapter using char_type = typename std::iterator_traits::value_type; iterator_input_adapter(IteratorType first, IteratorType last) - : current(std::move(first)), end(std::move(last)) {} + : current(std::move(first)), end(std::move(last)) + {} typename std::char_traits::int_type get_character() { @@ -150,7 +152,6 @@ class iterator_input_adapter { return current == end; } - }; diff --git a/include/nlohmann/detail/input/json_sax.hpp b/include/nlohmann/detail/input/json_sax.hpp index a7ad2abca..c41493d6d 100644 --- a/include/nlohmann/detail/input/json_sax.hpp +++ b/include/nlohmann/detail/input/json_sax.hpp @@ -166,9 +166,9 @@ class json_sax_dom_parser // make class move-only json_sax_dom_parser(const json_sax_dom_parser&) = delete; - json_sax_dom_parser(json_sax_dom_parser&&) noexcept = default; + json_sax_dom_parser(json_sax_dom_parser&&) = default; json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; - json_sax_dom_parser& operator=(json_sax_dom_parser&&) noexcept = default; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; ~json_sax_dom_parser() = default; bool null() @@ -341,9 +341,9 @@ class json_sax_dom_callback_parser // make class move-only json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) noexcept = default; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) noexcept = default; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; ~json_sax_dom_callback_parser() = default; bool null() diff --git a/include/nlohmann/detail/input/lexer.hpp b/include/nlohmann/detail/input/lexer.hpp index c2141ed26..44b4a5eaa 100644 --- a/include/nlohmann/detail/input/lexer.hpp +++ b/include/nlohmann/detail/input/lexer.hpp @@ -112,7 +112,7 @@ class lexer : public lexer_base public: using token_type = typename lexer_base::token_type; - explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept : ia(std::move(adapter)) , ignore_comments(ignore_comments_) , decimal_point_char(static_cast(get_decimal_point())) diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 8d6bcb1b1..70d9fca47 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -4851,7 +4851,7 @@ class file_input_adapter // make class move-only file_input_adapter(const file_input_adapter&) = delete; - file_input_adapter(file_input_adapter&&) = default; + file_input_adapter(file_input_adapter&&) noexcept = default; file_input_adapter& operator=(const file_input_adapter&) = delete; file_input_adapter& operator=(file_input_adapter&&) = delete; @@ -4897,9 +4897,10 @@ class input_stream_adapter // delete because of pointer members input_stream_adapter(const input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&) = delete; - input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; - input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) { rhs.is = nullptr; rhs.sb = nullptr; @@ -4934,7 +4935,8 @@ class iterator_input_adapter using char_type = typename std::iterator_traits::value_type; iterator_input_adapter(IteratorType first, IteratorType last) - : current(std::move(first)), end(std::move(last)) {} + : current(std::move(first)), end(std::move(last)) + {} typename std::char_traits::int_type get_character() { @@ -4959,7 +4961,6 @@ class iterator_input_adapter { return current == end; } - }; @@ -5453,9 +5454,9 @@ class json_sax_dom_parser // make class move-only json_sax_dom_parser(const json_sax_dom_parser&) = delete; - json_sax_dom_parser(json_sax_dom_parser&&) noexcept = default; + json_sax_dom_parser(json_sax_dom_parser&&) = default; json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; - json_sax_dom_parser& operator=(json_sax_dom_parser&&) noexcept = default; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; ~json_sax_dom_parser() = default; bool null() @@ -5628,9 +5629,9 @@ class json_sax_dom_callback_parser // make class move-only json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) noexcept = default; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; - json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) noexcept = default; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; ~json_sax_dom_callback_parser() = default; bool null() @@ -6099,7 +6100,7 @@ class lexer : public lexer_base public: using token_type = typename lexer_base::token_type; - explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept : ia(std::move(adapter)) , ignore_comments(ignore_comments_) , decimal_point_char(static_cast(get_decimal_point())) @@ -7817,7 +7818,7 @@ class binary_reader @param[in] adapter input adapter to read from */ - explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) + explicit binary_reader(InputAdapterType&& adapter) noexcept : ia(std::move(adapter)) { (void)detail::is_sax_static_asserts {}; } diff --git a/test/src/unit-class_lexer.cpp b/test/src/unit-class_lexer.cpp index ec9ce073e..d94bdbe79 100644 --- a/test/src/unit-class_lexer.cpp +++ b/test/src/unit-class_lexer.cpp @@ -40,7 +40,7 @@ json::lexer::token_type scan_string(const char* s, bool ignore_comments = false) json::lexer::token_type scan_string(const char* s, const bool ignore_comments) { auto ia = nlohmann::detail::input_adapter(s); - return nlohmann::detail::lexer(std::move(ia), ignore_comments).scan(); + return nlohmann::detail::lexer(std::move(ia), ignore_comments).scan(); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) } } // namespace @@ -48,7 +48,7 @@ std::string get_error_message(const char* s, bool ignore_comments = false); std::string get_error_message(const char* s, const bool ignore_comments) { auto ia = nlohmann::detail::input_adapter(s); - auto lexer = nlohmann::detail::lexer(std::move(ia), ignore_comments); + auto lexer = nlohmann::detail::lexer(std::move(ia), ignore_comments); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) lexer.scan(); return lexer.get_error_message(); } diff --git a/test/src/unit-deserialization.cpp b/test/src/unit-deserialization.cpp index 6b7023a9e..5ccc0d9e7 100644 --- a/test/src/unit-deserialization.cpp +++ b/test/src/unit-deserialization.cpp @@ -400,7 +400,7 @@ TEST_CASE("deserialization") SECTION("from array") { - uint8_t v[] = {'t', 'r', 'u', 'e'}; + uint8_t v[] = {'t', 'r', 'u', 'e'}; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) CHECK(json::parse(v) == json(true)); CHECK(json::accept(v)); @@ -496,7 +496,7 @@ TEST_CASE("deserialization") SECTION("from array") { - uint8_t v[] = {'t', 'r', 'u', 'e'}; + uint8_t v[] = {'t', 'r', 'u', 'e'}; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) CHECK(json::parse(std::begin(v), std::end(v)) == json(true)); CHECK(json::accept(std::begin(v), std::end(v))); @@ -561,7 +561,7 @@ TEST_CASE("deserialization") { SECTION("case 1") { - uint8_t v[] = {'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u'}; + std::array v = {{'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u'}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -578,7 +578,7 @@ TEST_CASE("deserialization") SECTION("case 2") { - uint8_t v[] = {'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u', '1'}; + std::array v = {{'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u', '1'}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -595,7 +595,7 @@ TEST_CASE("deserialization") SECTION("case 3") { - uint8_t v[] = {'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u', '1', '1', '1', '1', '1', '1', '1', '1'}; + std::array v = {{'\"', 'a', 'a', 'a', 'a', 'a', 'a', '\\', 'u', '1', '1', '1', '1', '1', '1', '1', '1'}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -612,7 +612,7 @@ TEST_CASE("deserialization") SECTION("case 4") { - uint8_t v[] = {'\"', 'a', 'a', 'a', 'a', 'a', 'a', 'u', '1', '1', '1', '1', '1', '1', '1', '1', '\\'}; + std::array v = {{'\"', 'a', 'a', 'a', 'a', 'a', 'a', 'u', '1', '1', '1', '1', '1', '1', '1', '1', '\\'}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -629,7 +629,7 @@ TEST_CASE("deserialization") SECTION("case 5") { - uint8_t v[] = {'\"', 0x7F, 0xC1}; + std::array v = {{'\"', 0x7F, 0xC1}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -646,7 +646,7 @@ TEST_CASE("deserialization") SECTION("case 6") { - uint8_t v[] = {'\"', 0x7F, 0xDF, 0x7F}; + std::array v = {{'\"', 0x7F, 0xDF, 0x7F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK_THROWS_WITH(_ = json::parse(std::begin(v), std::end(v)), @@ -665,7 +665,7 @@ TEST_CASE("deserialization") SECTION("case 7") { - uint8_t v[] = {'\"', 0x7F, 0xDF, 0xC0}; + std::array v = {{'\"', 0x7F, 0xDF, 0xC0}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -682,7 +682,7 @@ TEST_CASE("deserialization") SECTION("case 8") { - uint8_t v[] = {'\"', 0x7F, 0xE0, 0x9F}; + std::array v = {{'\"', 0x7F, 0xE0, 0x9F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -699,7 +699,7 @@ TEST_CASE("deserialization") SECTION("case 9") { - uint8_t v[] = {'\"', 0x7F, 0xEF, 0xC0}; + std::array v = {{'\"', 0x7F, 0xEF, 0xC0}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -716,7 +716,7 @@ TEST_CASE("deserialization") SECTION("case 10") { - uint8_t v[] = {'\"', 0x7F, 0xED, 0x7F}; + std::array v = {{'\"', 0x7F, 0xED, 0x7F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -733,7 +733,7 @@ TEST_CASE("deserialization") SECTION("case 11") { - uint8_t v[] = {'\"', 0x7F, 0xF0, 0x8F}; + std::array v = {{'\"', 0x7F, 0xF0, 0x8F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -750,7 +750,7 @@ TEST_CASE("deserialization") SECTION("case 12") { - uint8_t v[] = {'\"', 0x7F, 0xF0, 0xC0}; + std::array v = {{'\"', 0x7F, 0xF0, 0xC0}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -767,7 +767,7 @@ TEST_CASE("deserialization") SECTION("case 13") { - uint8_t v[] = {'\"', 0x7F, 0xF3, 0x7F}; + std::array v = {{'\"', 0x7F, 0xF3, 0x7F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -784,7 +784,7 @@ TEST_CASE("deserialization") SECTION("case 14") { - uint8_t v[] = {'\"', 0x7F, 0xF3, 0xC0}; + std::array v = {{'\"', 0x7F, 0xF3, 0xC0}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -801,7 +801,7 @@ TEST_CASE("deserialization") SECTION("case 15") { - uint8_t v[] = {'\"', 0x7F, 0xF4, 0x7F}; + std::array v = {{'\"', 0x7F, 0xF4, 0x7F}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); @@ -818,7 +818,7 @@ TEST_CASE("deserialization") SECTION("case 16") { - uint8_t v[] = {'{', '\"', '\"', ':', '1', '1'}; + std::array v = {{'{', '\"', '\"', ':', '1', '1'}}; json _; CHECK_THROWS_AS(_ = json::parse(std::begin(v), std::end(v)), json::parse_error&); CHECK(!json::accept(std::begin(v), std::end(v))); diff --git a/test/src/unit-regression1.cpp b/test/src/unit-regression1.cpp index e7a5c910a..3f0daf48e 100644 --- a/test/src/unit-regression1.cpp +++ b/test/src/unit-regression1.cpp @@ -119,6 +119,10 @@ struct nocopy { nocopy() = default; nocopy(const nocopy&) = delete; + nocopy(nocopy&&) = delete; + nocopy& operator=(const nocopy&) = delete; + nocopy& operator=(nocopy&&) = delete; + ~nocopy() = default; int val = 0; @@ -408,18 +412,18 @@ TEST_CASE("regression tests 1") json j; // Non-const access with key as "char []" - char array_key[] = "Key1"; + char array_key[] = "Key1"; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) CHECK_NOTHROW(j[array_key] = 1); CHECK(j[array_key] == json(1)); // Non-const access with key as "const char[]" - const char const_array_key[] = "Key2"; + const char const_array_key[] = "Key2"; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) CHECK_NOTHROW(j[const_array_key] = 2); CHECK(j[const_array_key] == json(2)); // Non-const access with key as "char *" - char _ptr_key[] = "Key3"; - char* ptr_key = &_ptr_key[0]; + char _ptr_key[] = "Key3"; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + char* ptr_key = &_ptr_key[0]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) CHECK_NOTHROW(j[ptr_key] = 3); CHECK(j[ptr_key] == json(3)); @@ -1099,10 +1103,10 @@ TEST_CASE("regression tests 1") SECTION("issue #414 - compare with literal 0)") { #define CHECK_TYPE(v) \ - CHECK((json(v) == v));\ - CHECK((v == json(v)));\ - CHECK_FALSE((json(v) != v));\ - CHECK_FALSE((v != json(v))); + CHECK((json(v) == (v)));\ + CHECK(((v) == json(v)));\ + CHECK_FALSE((json(v) != (v)));\ + CHECK_FALSE(((v) != json(v))); CHECK_TYPE(nullptr) CHECK_TYPE(0) diff --git a/test/src/unit-regression2.cpp b/test/src/unit-regression2.cpp index bde66d31c..cd1e74909 100644 --- a/test/src/unit-regression2.cpp +++ b/test/src/unit-regression2.cpp @@ -432,8 +432,8 @@ TEST_CASE("regression tests 2") SECTION("issue #2067 - cannot serialize binary data to text JSON") { - const unsigned char data[] = {0x81, 0xA4, 0x64, 0x61, 0x74, 0x61, 0xC4, 0x0F, 0x33, 0x30, 0x30, 0x32, 0x33, 0x34, 0x30, 0x31, 0x30, 0x37, 0x30, 0x35, 0x30, 0x31, 0x30}; - json j = json::from_msgpack(data, sizeof(data) / sizeof(data[0])); + const std::array data = {{0x81, 0xA4, 0x64, 0x61, 0x74, 0x61, 0xC4, 0x0F, 0x33, 0x30, 0x30, 0x32, 0x33, 0x34, 0x30, 0x31, 0x30, 0x37, 0x30, 0x35, 0x30, 0x31, 0x30}}; + json j = json::from_msgpack(data.data(), data.size()); CHECK_NOTHROW( j.dump(4, // Indent ' ', // Indent char diff --git a/test/src/unit-to_chars.cpp b/test/src/unit-to_chars.cpp index 3e8bbec3c..1a4574e0e 100644 --- a/test/src/unit-to_chars.cpp +++ b/test/src/unit-to_chars.cpp @@ -153,12 +153,12 @@ TEST_CASE("digit gen") CAPTURE(digits) CAPTURE(expected_exponent) - char buf[32]; + std::array buf{}; int len = 0; int exponent = 0; - nlohmann::detail::dtoa_impl::grisu2(buf, len, exponent, number); + nlohmann::detail::dtoa_impl::grisu2(buf.data(), len, exponent, number); - CHECK(digits == std::string(buf, buf + len)); + CHECK(digits == std::string(buf.data(), buf.data() + len)); CHECK(expected_exponent == exponent); };