Arch_id.h: error: template constraint not satisfied (CUDA 13.3)

When trying to compile Pytorch 2.12.0 or 2.13.0 with CUDA 13.3 or 13.3.1 using GCC 15.3.0, I get:

/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h(71): error: template constraint not satisfied
    };
     ^
/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/std/array(398): note #3135-D: substitution of arguments "<cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id>" for requires-clause failed
  requires (is_same_v<_Tp, _Args> && ...)
                                  ^
/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/std/array(398): note #3042-D: atomic constraint not constant
  requires (is_same_v<_Tp, _Args> && ...)
                                  ^
/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/std/array(398): note #2721-D: expression cannot be interpreted
  requires (is_same_v<_Tp, _Args> && ...)
                                  ^

/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h(66): error: no instance of constructor "cuda::std::__4::array" matches the argument list
            argument types are: (cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id, cuda::__4::arch_id)
    return ::cuda::std::array{
                             ^

/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h(66): error: cannot deduce class template arguments
    return ::cuda::std::array{
           ^

/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h(67): error: too many initializer values
      arch_id::sm_60, arch_id::sm_61, arch_id::sm_62, arch_id::sm_70, arch_id::sm_75, arch_id::sm_80,
                      ^

4 errors detected in the compilation of "/tmp/SBo/pytorch-v2.12.0/aten/src/ATen/native/cuda/BinaryMulKernel.cu".

Patch:

--- a/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h
+++ b/opt/cuda-13.3/targets/x86_64-linux/include/cccl/cuda/__device/arch_id.h
@@ -66 +66 @@
-  return ::cuda::std::array{
+  return ::cuda::std::array<arch_id, 22>{

Your arch_id.h’s exact path might be different.