これは、別の質問のコンテキストで発生しました。
どうやら、クラステンプレートのメンバー関数は、ODRで使用されている場合にのみインスタンス化されます。誰かがそれが正確に何を意味するのか説明できますか?一つの定義規則(ODR)上のWikipediaの記事は「言及していないODR-使用を」。
ただし、規格では次のように定義されています
名前が潜在的に評価される式として表示される変数は、定数式(5.19)に表示されるための要件を満たし、左辺値から右辺値への変換(4.1)がすぐに適用されるオブジェクトでない限り、odrで使用されます。
[basic.def.odr]で。
編集:どうやらこれは間違った部分であり、段落全体にさまざまなものの複数の定義が含まれています。これは、クラステンプレートメンバー関数に関連するものである可能性があります。
オーバーロードされていない関数の名前が、評価される可能性のある式または候補関数のセットのメンバーとして表示される場合、評価される可能性のある式から参照されたときにオーバーロード解決によって選択された場合、純粋仮想関数でない限り、odrが使用されます。関数とその名前は明示的に修飾されていません。
しかし、このルールが複数のコンパイルユニットでどのように機能するのかわかりません。クラステンプレートを明示的にインスタンス化すると、すべてのメンバー関数がインスタンス化されますか?