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!