首頁  >  文章  >  後端開發  >  為什麼「constexpr if」的「false」分支中的「static_assert」格式不正確?

為什麼「constexpr if」的「false」分支中的「static_assert」格式不正確?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-25 11:59:11916瀏覽

Why are `static_assert`s in the `false` branch of a `constexpr if` ill-formed?

constexpr if with Failed Static_Assert in the False Branch

問題:

雖然

儘管提案的缺乏對static_assert的明確提及,為什麼它在constexpr if 語句的非採取分支被視為格式錯誤?
  • 答案:
根據模板規則([temp.res]/8),如果出現以下情況,則程序是格式錯誤的NDR(無需診斷):

無法產生有效的專業化用於模板,或模板內constexpr if 語句的子語句。 模板未實例化。


對於具有非依賴條件的 static_assert ,其計算結果為false,無法為包含 static_assert 的模板產生有效的專業化。因此,包含此類語句的程式是錯誤的。

static_assert(false);   // ill-formed
範例:


`

void f() {

if constexpr (false)

} `在此範例中,constexpr if語句的非取用分支中的 static_assert 會使整個函數格式錯誤,因為 no可以為包含 static_assert 的範本產生有效的專業化。 但是,此規則不會影響 static_asserts至少一種類型可以評估為 true 的依賴條件。

以上是為什麼「constexpr if」的「false」分支中的「static_assert」格式不正確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn