Короче говоря, в 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 работает просто отлично.

Любые советы по этому вопросу будут оценены.

Спасибо!

Ответы на вопрос(0)

Ваш ответ на вопрос