Skip to content

rocWMMA 2.1.0 fails to compile with current MSVC STL: specializes std::is_arithmetic/is_floating_point/is_signed (N5014 [meta.rqmts]/4) #613

Description

@Dixon-Cider

Environment

ROCm 7.1.1 clang 21.0.0git + MSVC 14.51.36231 STL, Windows. (Compiles fine on Linux/libstdc++, which lacks the annotation.) rocWMMA 2.1.0.

Problem

library/include/rocwmma/internal/float8.hpp and rocwmma_xfloat32.hpp specialize standard <type_traits> templates for rocWMMA's fp8/xfloat32 types, e.g.:

template <> struct is_arithmetic<hip_fp8_e4m3>     : true_type {};
template <> struct is_floating_point<hip_fp8_e4m3> : true_type {};
template <> struct is_signed<hip_fp8_e4m3>         : true_type {};

The current MSVC STL marks these traits [[clang::no_specializations]] (per N5014 [meta.rqmts]/4, which forbids user specialization of them), so clang errors:

error: 'is_arithmetic' cannot be specialized: Specializing this standard library template is forbidden by N5014 [meta.rqmts]/4 [-Winvalid-specialization]

This makes rocWMMA fail to compile on Windows with a current MSVC toolset (e.g. downstream llama.cpp -DGGML_HIP_ROCWMMA_FATTN=ON).

Minimal repro

#include <type_traits>
struct hip_fp8_e4m3 {};
namespace std { template <> struct is_arithmetic<hip_fp8_e4m3> : true_type {}; }
int main() { return 0; }

clang++ -x c++ -std=gnu++17 -c repro.cpp (with MSVC 14.51 STL) → error. Adding -Wno-invalid-specialization compiles.

Suggested fix

Avoid specializing standard <type_traits> templates for rocWMMA types; use a rocWMMA-internal trait (e.g. rocwmma::is_arithmetic) instead.

Workaround for consumers: build with -Wno-invalid-specialization.

Also

The Windows ROCm 7.1 HIP SDK does not appear to ship rocWMMA at all — it must be vendored from this repo. A note in the docs about Windows + current-MSVC support would help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions