基于 constexpr if 编译会失败吗?

Cha*_*eon 1 c++ static-assert

有没有解决方法可以做这样的事情?

if constexpr (std::floating_point<T>) {}
else if constexpr (std::integral<T>) {}
...
else static_failure("Feature expansion needed");
Run Code Online (Sandbox Code Playgroud)

因为如果我替换static_failurestatic_assert,它需要复制所有上述条件(它们很多而且复杂)并且它变得丑陋。

// It does not work properly: always fail
else static_assert(false, "Feature expansion needed");
// works fine, but it is ugly
else static_assert(std::floating_point<T> || std::integral<T> || ... || ... || ..., "Feature expansion needed");
Run Code Online (Sandbox Code Playgroud)

我不喜欢像这样的运行时行为:

throw "Feature expansion needed";
Run Code Online (Sandbox Code Playgroud)

Sal*_*gar 5

是的,您只需要静态断言依赖于 T 并且始终为 false,如下所示:

if constexpr (std::is_integral_v<T>) {}
else
    static_assert(sizeof(T) < 0, "Only works for integral T");
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/Yhesd58rK