我有以下这段代码可以在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;
我在做什么错/不理解?
答案 0 :(得分:2)
我能够使用Clang 6.0进行复制。 Clang 7.0似乎还不错。参见https://godbolt.org/z/YCCZCl。此外,如果我切换条件,代码将编译:https://godbolt.org/z/EfmoUo。我认为这可能是C ++ 17实现不稳定的旧编译器的问题。我建议您升级到较新版本的编译器。