为什么 NVCC 对 constexpr 比非 constexpr 主机函数更严格?

问题描述

考虑以下代码

constexpr __host__   void foo() {  }

__global__ void baz()
{
    if constexpr(1==2) { foo(); }
}

fails to compile 带有 CUDA 11.3.1 的 NVCC。但是,如果我删除 constexpr - 它是 does compile

怎么会?这是一个错误吗?

解决方法

这是一个错误。我已将其提交给 NVIDIA:

https://developer.nvidia.com/nvidia_bug/3328502

(很难访问他们的错误跟踪系统,请尝试先通过 https://developer.nvidia.com 登录,然后查看您的错误,然后替换错误编号。)

显然没有修复!