Fix global UDLs (#3646)
* Add ci_test_noglobaludls to CI * Really default JSON_GLOBAL_UDLS to 1 * Test global UDLs * Suppress warnings * Clarify documentation
This commit is contained in:
parent
817a4a2117
commit
cbaf1033be
2
.github/workflows/ubuntu.yml
vendored
2
.github/workflows/ubuntu.yml
vendored
@ -62,7 +62,7 @@ jobs:
|
|||||||
container: ghcr.io/nlohmann/json-ci:v2.4.0
|
container: ghcr.io/nlohmann/json-ci:v2.4.0
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
target: [ci_test_diagnostics, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison]
|
target: [ci_test_diagnostics, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison, ci_test_noglobaludls]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: cmake
|
- name: cmake
|
||||||
|
@ -524,7 +524,8 @@ add_custom_target(ci_test_legacycomparison
|
|||||||
add_custom_target(ci_test_noglobaludls
|
add_custom_target(ci_test_noglobaludls
|
||||||
COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND}
|
COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND}
|
||||||
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
||||||
-DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_UseGlobalUDLs=OFF
|
-DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_GlobalUDLs=OFF
|
||||||
|
-DCMAKE_CXX_FLAGS=-DJSON_TEST_NO_GLOBAL_UDLS
|
||||||
-S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noglobaludls
|
-S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noglobaludls
|
||||||
COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noglobaludls
|
COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noglobaludls
|
||||||
COMMAND cd ${PROJECT_BINARY_DIR}/build_noglobaludls && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure
|
COMMAND cd ${PROJECT_BINARY_DIR}/build_noglobaludls && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure
|
||||||
|
@ -7,16 +7,17 @@ json operator "" _json(const char* s, std::size_t n);
|
|||||||
This operator implements a user-defined string literal for JSON objects. It can be used by adding `#!cpp _json` to a
|
This operator implements a user-defined string literal for JSON objects. It can be used by adding `#!cpp _json` to a
|
||||||
string literal and returns a [`json`](json.md) object if no parse error occurred.
|
string literal and returns a [`json`](json.md) object if no parse error occurred.
|
||||||
|
|
||||||
Use any of the following lines to bring the operator into scope:
|
It is recommended to bring the operator into scope using any of the following lines:
|
||||||
```cpp
|
```cpp
|
||||||
|
using nlohmann::literals::operator "" _json;
|
||||||
using namespace nlohmann::literals;
|
using namespace nlohmann::literals;
|
||||||
using namespace nlohmann::json_literals;
|
using namespace nlohmann::json_literals;
|
||||||
using namespace nlohmann::literals::json_literals;
|
using namespace nlohmann::literals::json_literals;
|
||||||
using namespace nlohmann;
|
using namespace nlohmann;
|
||||||
```
|
```
|
||||||
|
This is suggested to ease migration to the next major version release of the library.
|
||||||
|
See ['JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md#notes) for details.
|
||||||
|
|
||||||
Alternatively, define [`JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md) to make them available in the global
|
|
||||||
namespace.
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
`s` (in)
|
`s` (in)
|
||||||
|
@ -7,16 +7,17 @@ json_pointer operator "" _json_pointer(const char* s, std::size_t n);
|
|||||||
This operator implements a user-defined string literal for JSON Pointers. It can be used by adding `#!cpp _json_pointer`
|
This operator implements a user-defined string literal for JSON Pointers. It can be used by adding `#!cpp _json_pointer`
|
||||||
to a string literal and returns a [`json_pointer`](json_pointer/index.md) object if no parse error occurred.
|
to a string literal and returns a [`json_pointer`](json_pointer/index.md) object if no parse error occurred.
|
||||||
|
|
||||||
Use any of the following lines to bring the operator into scope:
|
It is recommended to bring the operator into scope using any of the following lines:
|
||||||
```cpp
|
```cpp
|
||||||
|
using nlohmann::literals::operator "" _json_pointer;
|
||||||
using namespace nlohmann::literals;
|
using namespace nlohmann::literals;
|
||||||
using namespace nlohmann::json_literals;
|
using namespace nlohmann::json_literals;
|
||||||
using namespace nlohmann::literals::json_literals;
|
using namespace nlohmann::literals::json_literals;
|
||||||
using namespace nlohmann;
|
using namespace nlohmann;
|
||||||
```
|
```
|
||||||
|
This is suggested to ease migration to the next major version release of the library.
|
||||||
|
See ['JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md#notes) for details.
|
||||||
|
|
||||||
Alternatively, define [`JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md) to make them available in the global
|
|
||||||
namespace.
|
|
||||||
## Parameters
|
## Parameters
|
||||||
|
|
||||||
`s` (in)
|
`s` (in)
|
||||||
|
@ -464,5 +464,5 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef JSON_USE_GLOBAL_UDLS
|
#ifndef JSON_USE_GLOBAL_UDLS
|
||||||
#define JSON_USE_GLOBAL_UDLS 0
|
#define JSON_USE_GLOBAL_UDLS 1
|
||||||
#endif
|
#endif
|
||||||
|
@ -5154,7 +5154,8 @@ inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC
|
|||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
||||||
#if JSON_USE_GLOBAL_UDLS
|
#if JSON_USE_GLOBAL_UDLS
|
||||||
using namespace nlohmann::literals::json_literals; // NOLINT(build/namespaces_literals)
|
using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
|
||||||
|
using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <nlohmann/detail/macro_unscope.hpp>
|
#include <nlohmann/detail/macro_unscope.hpp>
|
||||||
|
@ -2793,7 +2793,7 @@ JSON_HEDLEY_DIAGNOSTIC_POP
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef JSON_USE_GLOBAL_UDLS
|
#ifndef JSON_USE_GLOBAL_UDLS
|
||||||
#define JSON_USE_GLOBAL_UDLS 0
|
#define JSON_USE_GLOBAL_UDLS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if JSON_HAS_THREE_WAY_COMPARISON
|
#if JSON_HAS_THREE_WAY_COMPARISON
|
||||||
@ -24123,7 +24123,8 @@ inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC
|
|||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
||||||
#if JSON_USE_GLOBAL_UDLS
|
#if JSON_USE_GLOBAL_UDLS
|
||||||
using namespace nlohmann::literals::json_literals; // NOLINT(build/namespaces_literals)
|
using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
|
||||||
|
using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// #include <nlohmann/detail/macro_unscope.hpp>
|
// #include <nlohmann/detail/macro_unscope.hpp>
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
#define JSON_TESTS_PRIVATE
|
#define JSON_TESTS_PRIVATE
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <valarray>
|
#include <valarray>
|
||||||
|
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
#include "doctest_compatibility.h"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_CASE_TEMPLATE("element access 2", Json, nlohmann::json, nlohmann::ordered_json)
|
TEST_CASE_TEMPLATE("element access 2", Json, nlohmann::json, nlohmann::ordered_json)
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include "make_test_data_available.hpp"
|
#include "make_test_data_available.hpp"
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
#define JSON_TESTS_PRIVATE
|
#define JSON_TESTS_PRIVATE
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_CASE("JSON Merge Patch")
|
TEST_CASE("JSON Merge Patch")
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
|
@ -14,7 +14,9 @@
|
|||||||
#define JSON_TESTS_PRIVATE
|
#define JSON_TESTS_PRIVATE
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -22,7 +22,9 @@
|
|||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
using ordered_json = nlohmann::ordered_json;
|
using ordered_json = nlohmann::ordered_json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
#include "doctest_compatibility.h"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#undef JSON_USE_GLOBAL_UDLS
|
|
||||||
#define JSON_USE_GLOBAL_UDLS 0
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
TEST_CASE("user-defined string literals")
|
TEST_CASE("user-defined string literals")
|
||||||
@ -48,4 +46,12 @@ TEST_CASE("user-defined string literals")
|
|||||||
CHECK(R"({"foo": "bar", "baz": 42})"_json == j_expected);
|
CHECK(R"({"foo": "bar", "baz": 42})"_json == j_expected);
|
||||||
CHECK("/foo/bar"_json_pointer == ptr_expected);
|
CHECK("/foo/bar"_json_pointer == ptr_expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
SECTION("global namespace")
|
||||||
|
{
|
||||||
|
CHECK(R"({"foo": "bar", "baz": 42})"_json == j_expected);
|
||||||
|
CHECK("/foo/bar"_json_pointer == ptr_expected);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,9 @@ DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")
|
|||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
#ifdef JSON_TEST_NO_GLOBAL_UDLS
|
||||||
|
using namespace nlohmann::literals; // NOLINT(google-build-using-namespace)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
Loading…
Reference in New Issue
Block a user