From 11cc676142d9ca85cc40a60330ed1b081c3afc6d Mon Sep 17 00:00:00 2001 From: Bander <66913005+banderzhm@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:34:11 +0800 Subject: [PATCH] Improve MSVC C++ modules compatibility for nlohmann_json (#4952) * Improve MSVC C++ modules compatibility for nlohmann_json - Keep complete module interface with all exports - Export all standard types: json, basic_json, adl_serializer, json_pointer, ordered_json, ordered_map - Export detail namespace symbols for advanced usage - Ensure compatibility with MSVC C++20/23 modules - Maintain full functionality without breaking changes Signed-off-by: yudaichen <250074249@qq.com> * Add C++20 module Windows CI test and fix file ending - Add ci_module_cpp20 job to Windows workflow to verify module support with MSVC - Add missing newline at end of json.cppm file Signed-off-by: yudaichen <250074249@qq.com> --------- Signed-off-by: yudaichen <250074249@qq.com> --- .github/workflows/windows.yml | 10 ++++++++++ src/modules/json.cppm | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index cb78c9294..229de56da 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -112,3 +112,13 @@ jobs: run: cmake --build build --config Debug --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Debug --exclude-regex "test-unicode" --output-on-failure + + ci_module_cpp20: + runs-on: windows-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Run CMake (Debug) + run: cmake -S . -B build -G "Visual Studio 17 2022" -DJSON_CI=ON -DCMAKE_CXX_FLAGS="/permissive- /std:c++latest /utf-8 /W4 /WX" + - name: Build + run: cmake --build build --config Debug --target ci_module_cpp20 + \ No newline at end of file diff --git a/src/modules/json.cppm b/src/modules/json.cppm index 5f55acc2b..623d8cb81 100644 --- a/src/modules/json.cppm +++ b/src/modules/json.cppm @@ -12,3 +12,21 @@ export namespace nlohmann { using ::nlohmann::ordered_json; using ::nlohmann::ordered_map; } // namespace nlohmann + +NLOHMANN_JSON_NAMESPACE_BEGIN + +namespace detail +{ + export using NLOHMANN_JSON_NAMESPACE::detail::json_sax_dom_callback_parser; + export using NLOHMANN_JSON_NAMESPACE::detail::unknown_size; +} // namespace detail + +export using NLOHMANN_JSON_NAMESPACE::adl_serializer; +export using NLOHMANN_JSON_NAMESPACE::basic_json; +export using NLOHMANN_JSON_NAMESPACE::json; +export using NLOHMANN_JSON_NAMESPACE::json_pointer; +export using NLOHMANN_JSON_NAMESPACE::ordered_json; +export using NLOHMANN_JSON_NAMESPACE::ordered_map; +export using NLOHMANN_JSON_NAMESPACE::to_string; + +NLOHMANN_JSON_NAMESPACE_END