如何禁用 Clang 警告 "no case matching constant switch condition"

How to disable Clang warning "no case matching constant switch condition"

我正在处理一个使用另一个项目代码的项目,而另一个代码在编译期间给我一堆警告。我不想更改该代码(我的项目只是他们代码的薄包装,我希望能够在不打补丁的情况下引入更新)所以我想禁用这些警告,这样我就可以专注于只是我自己的代码。

遗憾的是,我看不到它的记录位置!

我收到的错误是:

warning: no case matching constant switch condition '2'

我有 looked in the manual 并尝试了 -Wno-switch-Wno-switch-bool-Wno-switch-enum,但其中 none 使此警告消失。我看不到手册中列出此警告消息的位置。

使用 Google 我无法找到任何与错误文本匹配的命令行选项。

使用 GitHub 我能够找到 runs a test for this warning 的 LLVM 源,但我没有任何运气映射回到 -W 选项来禁用它。

我错过了什么?

下面是一些重现错误的代码:

enum En { A, B, C };
template <En how> void foo() {
    int x = 0, y = 5;

    switch (how) {
        case A: x *= y; break;
        case B: x += y; break;
    }
}

template void foo<C>();

int main(void)
{
    return 0;
}

恐怕没有 -Wno-<what> 标志可以专门抑制此警告。 如果有,那么诊断将是:

warning: no case matching constant switch condition '2' [-W<what>]

您只能通过抑制 所有 警告来抑制它,使用 -Wno-everything, 我当然不建议这样做。