在std::result_of
頁面上有一個可能的實現部分。它有這段代碼:cppreference示例中不必要的std :: forward使用
template <class Base, class T, class Derived>
inline auto INVOKE(T Base::*&& pmd, Derived&& ref) ->
decltype(forward<Derived>(ref).*forward<T Base::*>(pmd)) {
return forward<Derived>(ref).*forward<T Base::*>(pmd);
}
我認爲不必要的部分是使用std::forward<T Base::*>
。 T Base::*&& pmd
的簽名不使用像「Derived&& ref
」那樣的「通用參考」。因此它總是一個指向成員的右值引用。
我的理解是否正確? forward<T Base::*>
可以取出嗎?
是的,轉發成員指針是不必要的。 (順便說一句:這是一個恥辱'INVOKE'不是標準庫的一部分) – Deduplicator 2014-12-07 22:25:19
@Deduplicator我和作者[N4169](http://www.open-std.org/jtc1/sc22/wg21/docs/論文/ 2014/n4169.html)同意'invoke'應該在標準庫中。 – Casey 2014-12-08 18:31:22