Ich versuche, einen Funktionsparameter in einer constexpr-if-Anweisung zu vergleichen.Vergleich des constexpr-Funktionsparameters in conexpr-if-Bedingung verursacht Fehler
Hier ist ein einfaches Beispiel:
constexpr bool test_int(const int i) {
if constexpr(i == 5) { return true; }
else { return false; }
}
Allerdings, wenn ich kompilieren dies mit GCC 7 mit den folgenden Flags: g++-7 -std=c++1z test.cpp -o test
bekomme ich folgende Fehlermeldung:
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; }
jedoch wenn ich test_int
durch eine andere Funktion ersetze:
constexpr bool test_int_no_if(const int i) { return (i == 5); }
Dann der folgende Code kompiliert ohne Fehler:
int main() {
constexpr int i = 5;
static_assert(test_int_no_if(i));
return 0;
}
Ich verstehe nicht, warum die constexpr-if-Version nicht kompilieren, zumal die static_assert ganz gut funktioniert.
Alle diesbezüglichen Ratschläge wären willkommen.
Danke!
Warum consxpr (i == 5) und nicht nur i == 5? – deW1
any warum so kompliziert? Warum nicht zurück i == 5? – deW1