constexpr if with Failed Static_Assert in the False Branch
Frage:
Trotz des Vorschlags Mangel an expliziter Erwähnung von static_assert, warum wird es innerhalb des nicht genommenen Zweigs von a verwendet? constexpr if-Anweisung gilt als schlecht geformt?
Antwort:
Gemäß der Regel für Vorlagen ([temp.res]/8) ist ein Programm schlecht geformt NDR (keine Diagnose erforderlich), wenn:
Im Fall eines static_assert mit einer nichtabhängigen Bedingung, die als falsch ausgewertet wird, kann keine gültige Spezialisierung vorliegen wird für die Vorlage generiert, die das static_assert enthält. Daher ist das Programm, das eine solche Anweisung enthält, schlecht geformt.
Beispiel:
`
void f() {
if constexpr (false)
static_assert(false); // ill-formed
}
`
In diesem Beispiel ist das static_assert im nicht genommenen Zweig der constexpr if-Anweisung macht die gesamte Funktion falsch geformt, da keine gültige Spezialisierung für eine Vorlage generiert werden kann, die static_assert enthält.
Diese Regel wirkt sich jedoch nicht auf static_asserts mit a aus abhängige Bedingung, die für mindestens einen Typ als wahr ausgewertet werden kann.
Das obige ist der detaillierte Inhalt vonWarum sind „static_assert's im „false'-Zweig eines „constexpr if' falsch formatiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!