Ini baru saja muncul dalam konteks pertanyaan lain .
Tampaknya fungsi anggota di templat kelas hanya dibuat jika digunakan dengan ODR. Bisakah seseorang menjelaskan apa sebenarnya artinya. The artikel wikipedia on One Definition Rule (ODR) tidak menyebutkan " ODR digunakan ".
Namun standar mendefinisikannya sebagai
Variabel yang namanya muncul sebagai ekspresi yang berpotensi dievaluasi digunakan odr kecuali itu adalah objek yang memenuhi persyaratan untuk muncul dalam ekspresi konstan (5.19) dan konversi lvalue-ke-rvalue (4.1) segera diterapkan.
di [basic.def.odr].
Sunting: Rupanya ini adalah bagian yang salah dan seluruh paragraf berisi banyak definisi untuk hal yang berbeda. Ini mungkin yang relevan untuk fungsi anggota templat kelas:
Fungsi non-kelebihan beban yang namanya muncul sebagai ekspresi yang berpotensi dievaluasi atau anggota dari sekumpulan fungsi kandidat, jika dipilih oleh resolusi kelebihan beban saat dirujuk dari ekspresi yang berpotensi dievaluasi, digunakan odr, kecuali jika itu adalah virtual murni fungsi dan namanya tidak terkualifikasi secara eksplisit.
Namun saya tidak mengerti, bagaimana aturan ini bekerja di beberapa unit kompilasi? Apakah semua fungsi anggota dibuat instance-nya jika saya secara eksplisit membuat instance template kelas?