mirror of
https://github.com/nlohmann/json.git
synced 2026-07-09 12:05:10 +00:00
8917c42bbc
The diagnostic matrix in this PR confirmed the affected range exactly: nvcc 12.0.1 and 12.1.1 both fail with "expected initializer before '<' token" on iteration_proxy.hpp's enable_borrowed_range variable template specialization at -std=c++20; 12.2.2 and newer already build cleanly. Guard JSON_HAS_RANGES off for that narrow nvcc version range, matching the existing GCC-11/libstdc++ carve-outs in the same ifdef chain, and regenerate single_include accordingly. Broaden the CUDA smoke test to also exercise comparisons (operator==/operator<=>, gated independently by JSON_HAS_THREE_WAY_COMPARISON) and range-based iteration, not just dump()/erase(), so the fix's actual scope is evidenced by CI rather than assumed from the single reported symptom. Have tests/cuda_example/CMakeLists.txt pick the newest C++ standard the detected nvcc version actually supports (20/17/11) instead of hard-requiring C++20, so older toolkits build at a lower standard instead of failing CMake configure outright. This is test-project-local only; the JSON_HAS_RANGES guard is what protects real client code, since a header can't control what -std= flag it's compiled with. Right-size the CI matrix from the 8-version diagnostic sweep down to 11.8.0 (C++17 fallback path) / 12.1.1 (permanent #3907 regression guard) / 12.6.3 (recent coverage), and update the compiler-version table in the quality assurance docs to match. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
22 lines
762 B
CMake
22 lines
762 B
CMake
cmake_minimum_required(VERSION 3.18)
|
|
project(json_cuda LANGUAGES CUDA)
|
|
|
|
add_executable(json_cuda json_cuda.cu)
|
|
target_include_directories(json_cuda PRIVATE ../../include)
|
|
|
|
# nvcc added C++20 support in CUDA 12.0 and C++17 in CUDA 11.0; pick the
|
|
# newest standard the detected compiler actually supports (see #3907)
|
|
# instead of hard-requiring one standard for every CUDA version.
|
|
if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
|
|
set(json_cuda_std 20)
|
|
elseif(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
|
|
set(json_cuda_std 17)
|
|
else()
|
|
set(json_cuda_std 11)
|
|
endif()
|
|
target_compile_features(json_cuda PUBLIC cuda_std_${json_cuda_std})
|
|
set_target_properties(json_cuda PROPERTIES
|
|
CUDA_EXTENSIONS OFF
|
|
CUDA_STANDARD_REQUIRED ON
|
|
)
|