規格は、
inline void foo();
これfoo
は、外部リンケージを持つインライン関数です(デフォルトでは、すべての関数宣言に外部リンケージがあるため)。これは奇妙なことに私を襲います。1つの定義ルールセクション3.2(C++03とC++11の両方)は次のように述べているためです。
3 ...インライン関数は、それが使用されるすべての変換単位で定義されるものとします。
5 a[n]の定義は複数存在する可能性があります...外部リンケージを使用したインライン関数(7.1.2)...複数の変換単位で定義されたDという名前のエンティティが与えられた場合...Dの各定義はトークンの同じシーケンスで構成されます
これは、インライン関数にも内部リンケージがある可能性があることを意味します。これは、外部リンケージを介して(つまり、変換ユニット間で)関数を使用すると、未定義の動作(段落3による)が呼び出され、その内容がすべての変換ユニットのインライン関数は同じである必要があります。
このルールには、下位互換性または特定のツールチェーンの理由がありますか?