Heim > Backend-Entwicklung > C++ > Hauptteil

Warum schlägt die Kompilierung einer statischen Assertion trotz eines Null-Funktionsaufrufs fehl?

Barbara Streisand
Freigeben: 2024-11-06 00:09:02
Original
295 Leute haben es durchsucht

Why Does a Static Assertion Fail Compilation Despite a Null Function Invocation?

Statische Assertion schlägt trotz Null-Funktionsaufrufs fehl

Bei der Verwendung von g 4.6.3 mit dem c 0x-Flag sind Entwickler auf einen unerwarteten Kompilierungsfehler gestoßen :

template <typename T>
inline T getValue(AnObject& {})
{
    static_assert(false, "this function has to be implemented for desired type");
}
Nach dem Login kopieren

Ergebnisse in:

static_assertion failed "this function has to be implemented for the desired type"
Nach dem Login kopieren

Dieser Fehler tritt auf, obwohl die Funktion nirgendwo im Code aufgerufen wird.

Erklärung

Laut dem C-Standard [temp.res]/8 ist die Vorlage falsch formatiert, wenn für eine nicht instanziierte Vorlagendefinition keine gültige Spezialisierung generiert werden kann. Obwohl der Compiler nicht verpflichtet ist, diesen Fehler zu diagnostizieren, ist es zulässig, die Vorlage abzulehnen.

Lösung

Ein Ansatz zur Lösung dieses Problems ist die Verwendung eines Typmerkmals um die statische Behauptung zu schützen:

template<typename T>
struct foobar : std::false_type
{ };

template <typename T>
inline T getValue(AnObject& {})
{
    static_assert(foobar<T>::value, "this function has to be implemented for desired type");
}
Nach dem Login kopieren

Mit dieser Änderung kann der Compiler die Vorlage nicht sofort ablehnen, da er die relevante Spezialisierung von foobar instanziieren muss. um den Wert der statischen Behauptung zu bestimmen, die trotzdem wie beabsichtigt fehlschlägt.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Kompilierung einer statischen Assertion trotz eines Null-Funktionsaufrufs fehl?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!