gpt4 book ai didi

c++ - Clang 说 is_same_v 的用法不是 constexpr,不知道为什么不是

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:43 31 4
gpt4 key购买 nike

我有以下代码,它在 gcc 中编译得很好,但在某些 .cpp 文件中没有 clang(并且是该​​文件中唯一的文本):

#include <type_traits>

static constexpr int howIsThisPossible() {
if constexpr (std::is_same_v<int, int>) {
return 42;
} else if constexpr (std::is_same_v<int, double>) {
return 123;
}
}

我明白了

error: constexpr if condition is not a constant expression

} else if constexpr (std::is_same_v<int, double>) {

^

我不明白当 is_same_v 的定义是:

template <typename _Tp, typename _Up>
inline constexpr bool is_same_v = is_same<_Tp, _Up>::value;

我做错了什么/不明白?

最佳答案

我能够使用 Clang 6.0 进行重现。 Clang 7.0 看起来不错。参见 https://godbolt.org/z/YCCZCl .此外,如果我切换条件,代码编译:https://godbolt.org/z/EfmoUo .我认为这可能是 C++17 实现不稳定的旧编译器的问题。我建议您升级到更新版本的编译器。

关于c++ - Clang 说 is_same_v<int, double> 的用法不是 constexpr,不知道为什么不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820216/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com