Heim > Backend-Entwicklung > C++ > Hauptteil

Warum sind „static_assert's im „false'-Zweig eines „constexpr if' falsch formatiert?

Mary-Kate Olsen
Freigeben: 2024-11-25 11:59:11
Original
914 Leute haben es durchsucht

Why are `static_assert`s in the `false` branch of a `constexpr if` ill-formed?

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:

  • Für eine Vorlage oder eine Unteranweisung kann keine gültige Spezialisierung generiert werden einer constexpr if-Anweisung innerhalb einer Vorlage.
  • Die Vorlage wird nicht instanziiert.

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
Nach dem Login kopieren

}
`

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage