mirror of
https://github.com/nlohmann/json.git
synced 2026-07-10 12:35:09 +00:00
58 lines
2.3 KiB
Markdown
58 lines
2.3 KiB
Markdown
# JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM
|
|
|
|
```cpp
|
|
#define JSON_HAS_FILESYSTEM /* value */
|
|
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */
|
|
```
|
|
|
|
When compiling with C++17, the library provides conversions from and to
|
|
[`std::filesystem::path`](https://en.cppreference.com/w/cpp/filesystem/path). As compiler support for filesystem is
|
|
limited, the library tries to detect whether
|
|
[`<filesystem>`/`std::filesystem`](https://en.cppreference.com/w/cpp/header/filesystem) (`JSON_HAS_FILESYSTEM`) or
|
|
[`<experimental/filesystem>`/`std::experimental::filesystem`](https://en.cppreference.com/w/cpp/header/experimental/filesystem)
|
|
(`JSON_HAS_EXPERIMENTAL_FILESYSTEM`) should be used. To override the built-in check, define `JSON_HAS_FILESYSTEM` or
|
|
`JSON_HAS_EXPERIMENTAL_FILESYSTEM` to `1`.
|
|
|
|
## Default definition
|
|
|
|
The default value is detected based on the preprocessor macros `#!cpp __cpp_lib_filesystem`,
|
|
`#!cpp __cpp_lib_experimental_filesystem`, `#!cpp __has_include(<filesystem>)`, or
|
|
`#!cpp __has_include(<experimental/filesystem>)`.
|
|
|
|
!!! info "Known compiler/stdlib exclusions"
|
|
|
|
Even when the feature-test macro indicates filesystem support is available, the library disables it on the following broken toolchains:
|
|
|
|
- **MinGW + GCC 8** — disabled entirely (broken `std::filesystem` implementation; [MinGW-w64 bug 737](https://sourceforge.net/p/mingw-w64/bugs/737/))
|
|
- **GCC (non-Clang) < 8** — disabled (no filesystem support)
|
|
- **Clang < 7** — disabled (no filesystem support)
|
|
- **MSVC < 19.14** — disabled (no filesystem support)
|
|
- **iOS < 13** — disabled (no filesystem support)
|
|
- **macOS < Catalina (10.15)** — disabled (no filesystem support)
|
|
|
|
If `JSON_HAS_FILESYSTEM` or `JSON_HAS_EXPERIMENTAL_FILESYSTEM` is `0` despite `__cpp_lib_filesystem` being defined, one
|
|
of the exclusions above likely applies to your toolchain.
|
|
|
|
## Notes
|
|
|
|
- Note that older compilers or older versions of libstdc++ also require the library `stdc++fs` to be linked to for
|
|
filesystem support.
|
|
- Both macros are undefined outside the library.
|
|
|
|
## Examples
|
|
|
|
??? example
|
|
|
|
The code below forces the library to use the header `<experimental/filesystem>`.
|
|
|
|
```cpp
|
|
#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
|
|
#include <nlohmann/json.hpp>
|
|
|
|
...
|
|
```
|
|
|
|
## Version history
|
|
|
|
- Added in version 3.10.5.
|