mirror of
https://github.com/nlohmann/json.git
synced 2026-09-29 06:14:53 +01:00
Leaving the character that terminates a number in the stream is observable: reading "1,2,3" with repeated operator>> works today only because the comma after each number is swallowed, and std::getline after a number skips the line break. Both break with the fix, so make it opt-in for 3.x, as suggested by @gregmarr in the review. - JSON_PRECISE_STREAM_POSITION (default 0) selects the peek-based input_stream_adapter. Without it, the adapter is the consuming one from develop and has no supports_lookahead, so lexer::release_lookahead() and the parser's calls to it compile to nothing. - The macro changes input_stream_adapter's layout and member functions, so it gets the ABI tag _psp, after _bics. The ABI config tests, the natvis generator, and nlohmann_json.natvis (regenerated) know the tag. - The tests for the fix move to unit-precise-stream-position.cpp, which defines the macro itself and runs in every build, and gain the two cases above. unit-deserialization.cpp pins the default behavior instead. - The docs describe the default behavior again and point to the new macro page; version history says "added in 3.13.0, planned default in 4.0.0". Signed-off-by: Niels Lohmann <mail@nlohmann.me>
54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | JSON for Modern C++ (supporting code)
|
|
// | | |__ | | | | | | version 3.12.0
|
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
//
|
|
// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#include "doctest_compatibility.h"
|
|
|
|
#include "config.hpp"
|
|
|
|
#include <nlohmann/json_fwd.hpp>
|
|
|
|
TEST_CASE("default namespace")
|
|
{
|
|
// GCC 4.8 fails with regex_error
|
|
#if !DOCTEST_GCC || DOCTEST_GCC >= DOCTEST_COMPILER(4, 9, 0)
|
|
SECTION("namespace matches expectation")
|
|
{
|
|
std::string expected = "nlohmann::json_abi";
|
|
|
|
#if JSON_DIAGNOSTICS
|
|
expected += "_diag";
|
|
#endif
|
|
|
|
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
|
|
expected += "_ldvcmp";
|
|
#endif
|
|
|
|
#if JSON_DIAGNOSTIC_POSITIONS
|
|
expected += "_dp";
|
|
#endif
|
|
|
|
#if JSON_BRACE_INIT_COPY_SEMANTICS
|
|
expected += "_bics";
|
|
#endif
|
|
|
|
#if JSON_PRECISE_STREAM_POSITION
|
|
expected += "_psp";
|
|
#endif
|
|
|
|
expected += "_v" STRINGIZE(NLOHMANN_JSON_VERSION_MAJOR);
|
|
expected += "_" STRINGIZE(NLOHMANN_JSON_VERSION_MINOR);
|
|
expected += "_" STRINGIZE(NLOHMANN_JSON_VERSION_PATCH) "::basic_json";
|
|
|
|
// fallback for Clang
|
|
const std::string ns{STRINGIZE(NLOHMANN_JSON_NAMESPACE) "::basic_json"};
|
|
|
|
CHECK(namespace_name<nlohmann::json>(ns) == expected);
|
|
}
|
|
#endif
|
|
}
|