Короче говоря, в test_int_no_if нет ничего, что зависит от того, являюсь ли я constexpr, а в test_int () - есть. («constexpr if» работает только с выражениями времени компиляции.)
аюсь сравнить параметр функции внутри оператора constexpr-if.
Вот простой пример:
constexpr bool test_int(const int i) {
if constexpr(i == 5) { return true; }
else { return false; }
}
Однако, когда я компилирую это с GCC 7 со следующими флагами:g++-7 -std=c++1z test.cpp -o test
Я получаю следующее сообщение об ошибке:
test.cpp: In function 'constexpr bool test_int(int)':
test.cpp:3:21: error: 'i' is not a constant expression
if constexpr(i == 5) { return true; }
Однако, если я заменюtest_int
с другой функцией:
constexpr bool test_int_no_if(const int i) { return (i == 5); }
Затем следующий код компилируется без ошибок:
int main() {
constexpr int i = 5;
static_assert(test_int_no_if(i));
return 0;
}
Я не понимаю, почему не удается скомпилировать версию constexpr-if, тем более что static_assert работает просто отлично.
Любые советы по этому вопросу будут оценены.
Спасибо!