铛说is_same_v <int,double>的使用不是constexpr,不确定如何

时间:2019-06-29 19:11:48

标签: c++ c++17

我有以下这段代码可以在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的定义为:

时,我不明白它不是constexpr。
template <typename _Tp, typename _Up>
inline constexpr bool is_same_v = is_same<_Tp, _Up>::value;

我在做什么错/不理解?

1 个答案:

答案 0 :(得分:2)

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