Weder GCC noch Clang erfüllen den C++-Standard

Neither GCC nor Clang are compliant with standard C++

In C++ haben Funktionstypen eine sogenannte Language Linkage, die entweder "C++", "C" oder eine andere implementierungsdefinierte Sprache sein kann. Der Standard schreibt vor, dass Funktionstypen mit unterschiedlicher Language Linkage verschiedene Typen sind, selbst wenn sie sonst identisch sind. GCC und Clang speichern diese Information jedoch nicht im Typ, was zu Verstößen gegen den Standard führt. Ein Beispiel: Eine static_assert-Prüfung, die fehlschlagen sollte, besteht fälschlicherweise. Auch Überladungen von Funktionen mit Funktionszeigerparametern können zu fehlerhaften Kompilierfehlern führen. Der Autor argumentiert, dass die Schuld beim Standard liegt, der geändert werden sollte, um dieses Verhalten als implementierungsdefiniert zu erlauben, da eine Änderung bei GCC und Clang einen ABI-Bruch verursachen würde.

GCC und Clang können ihr Verhalten nicht ändern, weil das ein ABI-Bruch wäre (extern "C"-Funktionstypen würden in gemangelten Namen anders kodiert).

Mehr von diesem Tag

2026-07-19