constexpr if with Failed Static_Assert in the False Branch
Soalan:
Walaupun cadangan itu kekurangan sebutan eksplisit static_assert, mengapa penggunaannya dalam cawangan yang tidak diambil daripada constexpr jika pernyataan dianggap tidak berbentuk?
Jawapan:
Mengikut peraturan untuk templat ([temp.res]/8), program tidak berfungsi -terbentuk NDR (tiada diagnostik diperlukan) jika:
Dalam kes static_assert dengan syarat tidak bergantung yang menilai kepada palsu, tiada pengkhususan yang sah boleh dijana untuk templat yang mengandungi static_assert. Oleh itu, program yang mengandungi pernyataan sedemikian adalah bentuk yang tidak betul.
Contoh:
`
void f() {
if constexpr (false)
static_assert(false); // ill-formed
}
`
Dalam ini contoh, static_assert dalam cabang tidak diambil bagi pernyataan constexpr if menjadikan keseluruhan fungsi tidak terbentuk, kerana tiada pengkhususan yang sah boleh dijana untuk templat yang mengandungi static_assert.
Walau bagaimanapun, peraturan ini tidak menjejaskan static_asserts dengan syarat bergantung yang boleh menilai kepada benar untuk sekurang-kurangnya satu jenis.
Atas ialah kandungan terperinci Mengapakah `static_assert`s dalam cabang `false` `constexpr if` tidak terbentuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!