本文介紹了為什么“A<0>=0"中的模板id由于大于或等于運算符“>="而不能在沒有空間的情況下編譯?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
限時送ChatGPT賬號..
template 使用 A = int;void f(A<0=0);//試圖聲明一個函數 f 接受 int,//使用默認參數 0//按預期工作://void f(A<0> = 0);
這既不能在 GCC 4.9.2 或 Clang 3.5 上編譯 - 更不用說 ICC 或 VC++.顯然 >=
位被解析為大于或等于運算符.但是,這對于 [temp.names]/3 來說似乎是不正確的:
名稱查找(3.4)后發現名稱是模板名稱或operator-function-id 或 literal-operator-id 指的是一個集合重載函數的任何成員是函數模板,如果這后面跟著一個<
,<
總是作為template-argument-list 并且從不作為小于運算符.解析模板參數列表時,第一個非嵌套>
138 作為結束分隔符 而不是一個大于運算符.[..] [ 示例:
template類 X {/* ...*
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!