* mkdocs: add string_view examples * mkdocs: reference underlying operators * mkdocs: add operator<=> examples * mkdocs: fix style check issues * mkdocs: tweak BJData page * mkdocs: add CMake option hints to macros * mkdocs: fix JSON_DISABLE_ENUM_SERIALIZATION definition * mkdocs: fix link to unit-udt.cpp * mkdocs: fix "Arbitrary Type Conversions" title * mkdocs: link to api/macros/*.md instead of features/macros.md * mkdocs: document JSON_DisableEnumSerialization CMake option * mkdocs: encode required C++ standard in example files * docset: detect gsed/sed * docset: update index * docset: fix CSS patching * docset: add list_missing_pages make target * docset: add list_removed_paths make target * docset: replace page titles with name from index * docset: add install target for Zeal docset browser * Use GCC_TOOL in ci_test_documentation target
77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
# JSON_DIAGNOSTICS
|
|
|
|
```cpp
|
|
#define JSON_DIAGNOSTICS /* value */
|
|
```
|
|
|
|
This macro enables [extended diagnostics for exception messages](../../home/exceptions.md#extended-diagnostic-messages).
|
|
Possible values are `1` to enable or `0` to disable (default).
|
|
|
|
When enabled, exception messages contain a [JSON Pointer](../json_pointer/json_pointer.md) to the JSON value that
|
|
triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds
|
|
some runtime overhead.
|
|
|
|
## Default definition
|
|
|
|
The default value is `0` (extended diagnostics are switched off).
|
|
|
|
```cpp
|
|
#define JSON_DIAGNOSTICS 0
|
|
```
|
|
|
|
When the macro is not defined, the library will define it to its default value.
|
|
|
|
## Notes
|
|
|
|
!!! note "ABI compatibility"
|
|
|
|
As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid
|
|
One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct
|
|
symbol names.
|
|
|
|
This allows different parts of a codebase to use different versions or configurations of this library without
|
|
causing improper behavior.
|
|
|
|
Where possible, it is still recommended that all code define this the same way for maximum interoperability.
|
|
|
|
!!! hint "CMake option"
|
|
|
|
Diagnostic messages can also be controlled with the CMake option
|
|
[`JSON_Diagnostics`](../../integration/cmake.md#json_diagnostics) (`OFF` by default)
|
|
which defines `JSON_DIAGNOSTICS` accordingly.
|
|
|
|
## Examples
|
|
|
|
??? example "Example 1: default behavior"
|
|
|
|
```cpp
|
|
--8<-- "examples/diagnostics_standard.cpp"
|
|
```
|
|
|
|
Output:
|
|
|
|
```
|
|
--8<-- "examples/diagnostics_standard.output"
|
|
```
|
|
|
|
This exception can be hard to debug if storing the value `#!c "12"` and accessing it is further apart.
|
|
|
|
??? example "Example 2: extended diagnostic messages"
|
|
|
|
```cpp
|
|
--8<-- "examples/diagnostics_extended.cpp"
|
|
```
|
|
|
|
Output:
|
|
|
|
```
|
|
--8<-- "examples/diagnostics_extended.output"
|
|
```
|
|
|
|
Now the exception message contains a JSON Pointer `/address/housenumber` that indicates which value has the wrong type.
|
|
|
|
## Version history
|
|
|
|
- Added in version 3.10.0.
|
|
- As of version 3.11.0 the definition is allowed to vary between translation units.
|