我有下面的代碼作爲一個實驗:C++ 11在成員函數上應用result_of,失敗了,爲什麼?
int f1() { return 0; }
struct Bar {
Bar() = delete;
int f() { return 0; }
int operator()() { return 1; }
};
int main()
{
decltype(f1()) x = 3;//f1() is expression
result_of<decltype(&f1)()>::type x1 = 3;//type+param
result_of<Bar()>::type x3 = 3;//type+param
decltype(declval<Bar>().f()) y = 4;//expression
decltype((((Bar*)nullptr)->*(&Bar::f))()) z = 5;//expression
result_of<decltype(std::mem_fn(&Bar::f))()>::type y2 = 3;//error!!!!!!
}
一切除了最後result_of
OK: 我試圖讓返回類型的Bar::f
,使用result_of
。
爲什麼它失敗了,以及如何糾正它?
它的成員函數,它要求一個隱含的對象參數,即,'的result_of ::類型y2' –
謝謝,它工作,但似乎「result_of :: type y2 = 3;」也可以通過編譯。哪一個是正確的,爲什麼BAR *仍然可以被賦予這個mem_fn? –
無論您使用指針還是引用類型,它都沒有區別。這裏重要的是價值類別和簡歷資格 –