これはちょうどanother questionという文脈の中で出てきました。「ODRを使用する」とは何を意味しますか?
明らかに、クラステンプレートのメンバー関数は、ODRが使用されている場合にのみインスタンス化されます。 誰かが正確に何を意味するのか説明できますか? wikipedia article on One Definition Rule (ODR)には「ODR-使用」は記載されていません。
標準は
名前が潜在的に評価された式 として表示されている変数として定義しかしながらODR-使用が定数式に現れる の要件を満たす目的でない限り (5.19)、左辺値と右辺値は 変換(4.1)が直ちに適用されます。 [basic.def.odr]の
編集:明らかにこれは間違った部分であり、段落全体にはさまざまな定義が含まれています。オーバーロードの解決ときで選択された場合、
名前が 潜在的に評価された式または候補 関数のセットのメンバーとして表示される非オーバーロードされた関数:これはクラステンプレートのメンバ関数に関連する1かもしれません純粋な 仮想関数で、その名前が明示的に修飾されていない場合は、 潜在的に評価される式から参照される、odr-usedです。
このルールは複数のコンパイル単位でどのように動作するのですか。クラステンプレートを明示的にインスタンス化すると、すべてのメンバー関数がインスタンス化されますか?
[basic.def.odr]/6は、クラステンプレートのメンバー関数に適用されます。 "複数の定義があります[...]" – dyp
* "すべてのメンバ関数がインスタンス化されていますか?クラステンプレートを明示的にインスタンス化するとどうなるでしょうか? "はい、[temp.explicit]/8 + 9を参照してください。 – dyp