Comparando o parâmetro da função constexpr na condição constexpr-if causa erro

Estou tentando comparar um parâmetro de função dentro de uma instrução constexpr-if.

Aqui está um exemplo simples:

constexpr bool test_int(const int i) {
  if constexpr(i == 5) { return true; }
 else { return false; }
}

No entanto, quando eu compilar isso com o GCC 7 com os seguintes sinalizadores:g++-7 -std=c++1z test.cpp -o test Eu recebi a seguinte mensagem de erro:

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; }

No entanto, se eu substituirtest_int com uma função diferente:

constexpr bool test_int_no_if(const int i) { return (i == 5); }

Em seguida, o código a seguir é compilado sem erros:

int main() {
  constexpr int i = 5;
  static_assert(test_int_no_if(i));
  return 0;
}

Não entendo por que a versão constexpr-if falha na compilação, especialmente porque o static_assert funciona muito bem.

Qualquer conselho sobre isso seria apreciado.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion