Cの空の構造体が制約違反になるのはなぜですか? このルールが C++ で変更されるのはなぜですか?
歴史的な理由はありますか?
Cには継承がないので、それらは必要ありません。区別可能なポインター型が必要な場合は、不完全な型へのポインターを使用できます。
struct opaque;
struct opaque* stranger = 0;
正常に動作するはずです。
私の推測はこれです:
C では、継承、テンプレート、および関数のオーバーロード (C++ で空の構造体を使用する 3 つの主な理由) が、基本インターフェイスとして、テンプレート パラメーターとして、オーバーロードの解決を支援する型としてありません。
C で空の構造体を実際に使用する方法を考えられますか?