Heim > Backend-Entwicklung > C++ > Wie wirkt sich ein fehlgeschlagener „static_assert' in einem nicht ausgeführten „if constexpr'-Block auf die Programmgültigkeit aus?

Wie wirkt sich ein fehlgeschlagener „static_assert' in einem nicht ausgeführten „if constexpr'-Block auf die Programmgültigkeit aus?

Barbara Streisand
Freigeben: 2024-11-27 04:17:09
Original
780 Leute haben es durchsucht

How Does a Failed `static_assert` in an Untaken `if constexpr` Block Affect Program Validity?

Wie wirkt sich ein fehlgeschlagener static_assert auf einen if constexpr-Block (false) aus?

Ein static_assert innerhalb eines nicht genommenen Zweigs eines if constexpr Die Aussage gilt als fehlerhaft und erfordert keine Diagnose. Diese Konsequenz ergibt sich aus der Regel in [temp.res]/8, die ein Programm als fehlerhaft ansieht, wenn keine gültige Spezialisierung für eine Vorlage oder eine Unteranweisung innerhalb einer constexpr if-Anweisung generiert werden kann.

In diesem Fall Wenn die Bedingung von static_assert nicht abhängig ist und als falsch ausgewertet wird, kann keine gültige Spezialisierung für die Vorlage generiert werden, die die Behauptung enthält. Dies macht das Programm fehlerhaft, auch wenn die Verzweigung nicht genommen wird.

Statische_asserts mit einer abhängigen Bedingung bleiben jedoch davon unberührt. Wenn die Bedingung für mindestens einen Typ als wahr ausgewertet werden kann, bleibt die Vorlage gültig.

Beispiel

Bedenken Sie den folgenden Code:

template< typename T><
constexpr void other_library_foo(){
    static_assert(std::is_same<T,int>::value);
}

template<class T>
void g() {
  if constexpr (false)
    other_library_foo<T>(); 
}

int main(){
    g<float>();
    g<int>();
}
Nach dem Login kopieren

Obwohl die if constexpr-Bedingung falsch ist, ist der Code immer noch falsch formatiert, da static_assert in other_library_foo ein nichtabhängiges enthält Bedingung, die als falsch ausgewertet wird.

Das obige ist der detaillierte Inhalt vonWie wirkt sich ein fehlgeschlagener „static_assert' in einem nicht ausgeführten „if constexpr'-Block auf die Programmgültigkeit aus?. 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