Skip to content

JSON_USE_GLOBAL_UDLS

#define JSON_USE_GLOBAL_UDLS /* value */

When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

Default definition

The default value is 1.

#define JSON_USE_GLOBAL_UDLS 1

When the macro is not defined, the library will define it to its default value.

Notes

Future behavior change

The user-defined string literals will be removed from the global namespace in the next major release of the library.

To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

CMake option

The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

Examples

Example 1: Default behavior

The code below shows the default behavior using the _json UDL.

#include<nlohmann/json.hpp>
#include<iostream>
intmain()
{
autoj="42"_json;
std::cout<<j<<std::endl;
}

Output:

42
Example 2: Namespaced UDLs

The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

#define JSON_USE_GLOBAL_UDLS 0
#include<nlohmann/json.hpp>
#include<iostream>
intmain()
{
// auto j = "42"_json; // This line would fail to compile,
// because the UDLs are not in the global namespace
// Bring the UDLs into scope
usingnamespacenlohmann::json_literals;
autoj="42"_json;
std::cout<<j<<std::endl;
}

Output:

42

See also

Version history

  • Added in version 3.11.0.

AltStyle によって変換されたページ (->オリジナル) /