GCCもClangも標準C++に準拠していない、と開発者が指摘

Neither GCC nor Clang are compliant with standard C++

C++標準は、言語リンケージが異なる関数型は別の型であると明確に規定しています。しかし、GCCとClangはこの規則を実装しておらず、`extern "C"`で宣言された関数型と通常の関数型を同一視しています。このため、`static_assert`が失敗すべきところで成功したり、オーバーロードが誤ってODR違反とみなされたりします。開発者のsebsite.pw氏は、責任はコンパイラではなく標準側にあり、この挙動を実装定義に変更すべきだと主張します。ABIの破壊を避けるため、コンパイラは現状を変更できないとしています。

GCCとClangは、型と言語リンケージの情報を保存しないため、異なる言語リンケージを持つ2つの関数が同一になることがあります。

この日のほかの記事

2026-07-19