Clang говорит, что использование is_same_v <int, double> не является constexpr, не знаю, как это не так - PullRequest
2 голосов
/ 29 июня 2019

У меня есть следующий код, который прекрасно компилируется в gcc, но не входит в какой-то файл .cpp (и является единственным текстом в этом файле):

#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>) {

                        ^

Я не понимаю, почему это не constexpr, когда определение is_same_v:

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

Что я делаю неправильно / не понимаю?

1 Ответ

2 голосов
/ 30 июня 2019

Мне удалось воспроизвести с Clang 6.0.Clang 7.0 кажется нормальным.См. https://godbolt.org/z/YCCZCl.Кроме того, если я переключаю условия, код компилируется: https://godbolt.org/z/EfmoUo.Я думаю, что это может быть проблема старого компилятора с нестабильной реализацией C ++ 17.Я предлагаю вам перейти на более новую версию компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...