5
如果我將右移運算符的地址作爲模板參數傳遞,則右移符號將被誤讀爲模板參數列表的末尾,由此產生的混亂造成了多重錯誤。將右移運算符用作模板參數時的語法錯誤
template <class T, void(T::*)(int)> struct TemplateMagic {};
struct TestStruct { void operator>> (int) {} };
int main() {
//All the errors are on this line:
TemplateMagic<TestStruct, &TestStruct::operator>> >* ptr;
}
在微軟的Visual Studio Express的2013運行此爲Windows桌面版本 更新12.0.31101.00 4給出了以下錯誤:
錯誤C2143:語法錯誤:缺少 ';'之前「>」
錯誤C2275:「TestStruct」:非法使用這種類型的作爲表達
錯誤C2833:「運算>」不是可識別的操作者或鍵入
至於我可以告訴,operator>> >
符號正在分解,因此它將其讀取爲operator>
,然後終止>
關閉模板參數,並以lulz的備用>
結束。我認爲這是一個錯誤。
有沒有任何方法可以對此進行改寫,使其被識別爲有效?
你試過把它放在圓括號裏:'TemplateMagic>)> * ptr;'? –