5.17 / 3
Jika operan kedua dan ketiga memiliki jenis yang berbeda, dan salah satu dari keduanya memiliki jenis kelas (mungkin cv-kualifikasi), upaya dilakukan untuk mengkonversi masing-masing operan tersebut ke jenis yang lain. Proses untuk menentukan apakah ekspresi operan E1 dari tipe T1 dapat dikonversi agar sesuai dengan ekspresi operan E2 dari tipe T2 didefinisikan sebagai berikut:
- Jika E2 adalah lvalue: E1 dapat dikonversi untuk mencocokkan E2 jika E1 dapat secara implisit dikonversi (klausa 4) ke jenis "referensi ke T2", tunduk pada batasan bahwa dalam konversi referensi harus mengikat langsung (8.5.3 ) ke E1.
- Jika E2 adalah nilai, atau jika konversi di atas tidak dapat dilakukan:
- jika E1 dan E2 memiliki tipe kelas, dan tipe kelas yang mendasarinya sama atau satu adalah kelas dasar yang lain: E1 dapat dikonversi agar sesuai dengan E2 jika kelas T2 adalah jenis yang sama dengan, atau kelas dasar dari , kelas T1, dan kualifikasi cv T2 adalah kualifikasi cv yang sama dengan, atau kualifikasi cv yang lebih besar daripada, kualifikasi cv T1. Jika konversi diterapkan, E1 diubah menjadi nilai tipe T2 yang masih merujuk ke objek kelas sumber asli (atau sub-objek yang sesuai daripadanya). [ Catatan: artinya, tidak ada salinan yang dibuat. - end note ] dengan menyalin-inisialisasi temporer tipe T2 dari E1 dan menggunakan temporer itu sebagai operan yang dikonversi.
Kalau tidak (yaitu, jika E1
atau E2 memiliki tipe non kelas, atau jika keduanya memiliki tipe kelas tetapi kelas yang mendasari tidak sama atau satu kelas dasar yang lain): E1 dapat dikonversi untuk mencocokkan E2 jika E1 dapat secara implisit dikonversi ke tipe yang akan dimiliki ekspresi E2 jika E2 dikonversi ke nilai (atau tipe yang dimilikinya, jika E2 adalah nilai).
Dengan menggunakan proses ini, ditentukan apakah operan kedua dapat dikonversi agar sesuai dengan operan ketiga, dan apakah operan ketiga dapat dikonversi agar sesuai dengan operan kedua. Jika keduanya dapat dikonversi, atau satu dapat dikonversi tetapi konversinya ambigu, programnya salah bentuk. Jika tidak ada yang dapat dikonversi, operan dibiarkan tidak berubah dan pemeriksaan lebih lanjut dilakukan seperti yang dijelaskan di bawah ini. Jika tepat satu konversi dimungkinkan, konversi itu diterapkan ke operan yang dipilih dan operan yang dikonversi digunakan sebagai pengganti operan asli untuk sisa bagian ini.
5.17 / 5
Kalau tidak, hasilnya adalah nilai. Jika operan kedua dan ketiga tidak memiliki jenis yang sama, dan salah satu dari keduanya memiliki jenis kelas (mungkin cv-kualifikasi), resolusi kelebihan digunakan untuk menentukan konversi (jika ada) untuk diterapkan pada operan (13.3.1.2, 13.6) . Jika resolusi kelebihan gagal, program ini salah bentuk. Jika tidak, konversi yang ditentukan diterapkan, dan operan yang dikonversi digunakan sebagai pengganti operan asli untuk sisa bagian ini.