Bagaimanakah `static_assert` yang Gagal dalam Blok `if constexpr` yang Tidak Diambil Mempengaruhi Kesahan Program?

Barbara Streisand
Lepaskan: 2024-11-27 04:17:09
asal
725 orang telah melayarinya

How Does a Failed `static_assert` in an Untaken `if constexpr` Block Affect Program Validity?

Bagaimanakah static_assert yang gagal memberi kesan kepada blok if constexpr (false)?

Static_assert dalam cawangan yang tidak diambil dari if constexpr pernyataan dianggap tidak betul, tanpa diagnostik diperlukan. Akibat ini berpunca daripada peraturan dalam [temp.res]/8, yang menganggap program tidak terbentuk jika tiada pengkhususan yang sah boleh dijana untuk templat atau substatement dalam pernyataan constexpr if.

Dalam kes ini daripada static_assert, jika syarat tidak bergantung dan dinilai palsu, tiada pengkhususan yang sah boleh dijana untuk templat yang mengandungi penegasan. Ini menjadikan program tidak berbentuk, walaupun cawangan tidak diambil.

Walau bagaimanapun, static_asserts dengan keadaan bergantung kekal tidak terjejas. Jika syarat boleh dinilai kepada benar untuk sekurang-kurangnya satu jenis, templat kekal sah.

Contoh

Pertimbangkan kod berikut:

template< typename T><
constexpr void other_library_foo(){
    static_assert(std::is_same<T,int>::value);
}

template<class T>
void g() {
  if constexpr (false)
    other_library_foo<T>(); 
}

int main(){
    g<float>();
    g<int>();
}
Salin selepas log masuk

Walaupun syarat constexpr palsu, kod tersebut masih tidak terbentuk kerana static_assert dalam other_library_foo mengandungi bukan bergantung keadaan yang menilai palsu.

Atas ialah kandungan terperinci Bagaimanakah `static_assert` yang Gagal dalam Blok `if constexpr` yang Tidak Diambil Mempengaruhi Kesahan Program?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan