編譯器中非型別模板參數的 static_assert 行為不一致
在 C 中,static_assert 可用於編譯時驗證條件。然而,最近的觀察發現,當 static_assert 與不同編譯器中的非類型模板參數結合使用時,其行為存在差異。
具體來說,以下程式碼片段:
當嘗試使用 static_assert 停用常規模板實例化時,Clang 和 GCC 上的行為有所不同。即使模板未實例化,Clang 也會觸發斷言錯誤,而 GCC 僅在參數值不是 42 的情況下實例化時才會引發錯誤。
要了解差異,讓我們探索C 標準的相關部分( [temp.res]/8):
根據此規則,主模板Hitchhiker 格式錯誤,因為無法產生有效的專業化。因此,不需要發出診斷。然而,儘管缺乏要求,Clang 還是選擇提供診斷。
如果意圖將實例化限制為僅 42 個,建議的方法是省略通用模板定義,如下所示:
以上是為什麼編譯器中的「static_assert」與非型別模板參數的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!