Clang-CL now reports as spy::clangcl_ and defines SPY_COMPILER_IS_CLANGCL. It reported as spy::msvc_ up to 2.0.0.
MINGW32 and MINGW64 now report as spy::mingw32_ and spy::mingw64_ and define SPY_COMPILER_IS_MINGW32 or SPY_COMPILER_IS_MINGW64. They reported as spy::gcc_ up to 2.0.0.
Features:
Report the C++ standard version through spy::cpp_standard and the _cpp literal.
Detect half-precision support through spy::supports::fp16, covering the _Float16 type, scalar and vector arithmetic, and packed conversions.
Compiling below C++20 now stops on a diagnostic that names the required standard.
Bugs:
Restore SPY_DISABLE_ADDRESS_SANITIZERS and SPY_DISABLE_THREAD_SANITIZERS under MINGW, where the compiler reclassification had left them empty.
Lower the MINGW version floors of the unit tests to the one gcc has, 7'2. They asked for 15.2, which no runner carries, and the assertion had never run.
Give every spy::supports indicator one object per program. The fp16 ones were declared static and the sanitizer ones had no inline, so each translation unit held its own copy at its own address.
Accept both spellings of the Emscripten version macros, renamed in Emscripten 5.
Compile cleanly under -Wshadow.
Infrastructure:
Vendor CPM.cmake at v0.43.1, so a configure step no longer downloads it.
Drive the CI from CMake presets and the copacabana v8 shared workflows, with coverage, sanitizers, standalone generation and pre-commit checks.
Add Clang-CL and MINGW64 jobs to the Windows matrix, and cover every compiler tag in the unit tests.
Check what a test claims under NDEBUG too: assert is compiled out in Release, so half the matrix only ever checked that the tests build. test/assert.hpp holds a spy::check that takes the condition as a template argument and names what it looked at either way.
ARM Neon and ASIMD discrimination are in line with SSE-like extensions. spy::asimd_ is now a descendant of spy::neon_. This leads to the removal of spy::supports_aarch64
Bugs:
Fix #12 : Remove <iostream> from public headers
Infrastructure:
Fix Circle CI uses a new Docker with more cross-compiler and setup