bool_Is_MemObj = std::is_member_object_pointer<_Decayed>::value>struct_Invoke1;//成员函数,标准库当中传递//_FirstTy的作用是用来判断 _Callable的Class是否是_FirstTy的Class或者Parent Class//这里为了简化不再判断template<typename _Callable, typename _FirstTy...
如果从调用的情况来看,CTest::s和CTest::s_m一样,都是obj.fun(args...),但是实际中,std::invoke_result会将它视为对象成员。所以如果我们使用std::invoke_result<decltype(&CTest::s), CTest, int, double>::type是会报错的,正确的方法是只能使用std::invoke_result<decltype(&CTest::s), CTest>::ty...
int invoke_other();那么std::__result_of_impl是如何区分出了这三种不同的调⽤⽅式呢?libstdc++中实现了两个类型判断,is_member_object_pointer和is_member_function_pointer。通过这两个判断不同的输出,来区分三种不同的调⽤⽅式。这两个函数的结构差不多,⾸先会对判断输⼊的类型是否为对象的...