Comparar el parámetro de la función constexpr en la condición constexpr-if causa error

Estoy tratando de comparar un parámetro de función dentro de una declaración constexpr-if.

Aquí hay un ejemplo simple:

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

Sin embargo, cuando compilo esto con GCC 7 con los siguientes indicadores:g++-7 -std=c++1z test.cpp -o test Me sale el siguiente mensaje de error:

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

Sin embargo, si reemplazotest_int con una función diferente:

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

Luego, el siguiente código se compila sin errores:

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

No entiendo por qué la versión constexpr-if no se puede compilar, especialmente porque el static_assert funciona bien.

Cualquier consejo sobre esto sería apreciada.

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta