Files
json/api/macros/json_has_filesystem/index.md
T
2026-07-09 15:25:36 +00:00

2.2 KiB

JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM

#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. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::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_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

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)
  • 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>.

#define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
#include <nlohmann/json.hpp>

...

Version history

  • Added in version 3.10.5.