標準はfoo
がinline function with external linkageあることなぜインライン関数はデフォルトで外部リンケージを持っていますか?
inline void foo();
の宣言を与えられたと述べている(デフォルトですべての関数宣言は、外部結合を持っているので)。これは私を奇妙に襲う。 1つの定義ルールセクション3.2(C++ 03とC++ 11の両方)は、次のように述べています。
3 ...インライン関数は、使用されるすべての変換単位で定義されます。
5外部リンケージ(7.1.2)を持つ[n] ...インライン関数の複数の定義があります...複数の変換単位で定義されたDという名前のエンティティDの定義は同じトークンシーケンスで構成されます。
これは、外部リンケージ(つまり、翻訳単位)を介して関数を使用すると、インライン関数も内部リンケージを持つ可能性があることを意味します。定義されていない振る舞い(第3項による)を呼び出すこと、およびすべての翻訳単位におけるインライン関数の内容が同じである必要があること。
このルールの下位互換性または特定のツールチェーンの理由はありますか?
私は[this](http://www.glenmccl.com/ansi_015.htm)が質問に答えると信じています。 –
@Als:これは落とし穴を説明していますが、その変更が行われた理由はありません。 –
これを完全に読んだら、次のように述べています。「この変更のための即時の動機付けは、同じ会議で採用された新しいテンプレートコンパイルモデルの必要性でしたが、より一般的に、デフォルトを変更することは、この変更はANSIとISOの両方で全会一致で承認されました。 –