1
0
mirror of https://github.com/nlohmann/json.git synced 2025-07-19 17:03:16 +03:00
Files
json/docs/mkdocs/docs/api/macros/json_assert.md
Niels Lohmann b21c345179 Reorganize directories (#3462)
* 🚚 move files
* 🚚 rename doc folder to docs
* 🚚 rename test folder to tests
2022-05-01 09:41:50 +02:00

2.0 KiB

JSON_ASSERT

#define JSON_ASSERT(x) /* value */

This macro controls which code is executed for runtime assertions of the library.

Parameters

x (in)
expression of scalar type

Default definition

The default value is #!cpp assert(x).

#define JSON_ASSERT(x) assert(x)

Therefore, assertions can be switched off by defining NDEBUG.

Notes

  • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
  • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
  • The macro is undefined outside the library.

Examples

??? example "Example 1: default behavior"

The following code will trigger an assertion at runtime:

```cpp
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main()
{
    const json j = {{"key", "value"}};
    auto v = j["missing"];
}
```

Output:

```
Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.
```

??? example "Example 2: user-defined behavior"

The assertion reporting can be changed by defining `JSON_ASSERT(x)` differently.

```cpp
#include <cstdio>
#include <cstdlib>
#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, "assertion error in %s\n", __FUNCTION__); std::abort();}

#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main()
{
    const json j = {{"key", "value"}};
    auto v = j["missing"];
}
```

Output:

```
assertion error in operator[]
```

Version history

  • Added in version 3.9.0.