小编Pab*_*ern的帖子

带有cv限定参数的成员对象的result_of

鉴于以下声明:

struct MyClass { };
typedef int MyClass::*Mp;
Run Code Online (Sandbox Code Playgroud)

在gcc 6.2和Clang编译器上我都尝试过,result_of<Mp(const MyClass)>::type收益率int&&.

我的问题摘要:为什么int&&而不是const int&&或者只是简单int?

更多背景:标准说这result_of是这样定义的:

成员typedef类型应该命名类型 decltype(INVOKE(declval<Fn>(), declval<ArgTypes>()...));

该标准还以这种方式为指针指向成员对象定义INVOKE:

- 当N == 1时,t1.*f,f是指向T类数据成员的指针,is_base_of_v<T, decay_t<decltype(t1)>>为真;

请注意,这decay_t仅用于测试此项目是否适用.据我所知,应用上述两点应该产生:

decltype(declval<const MyClass>().*declval<Mp>())
Run Code Online (Sandbox Code Playgroud)

哪个收益率const int&&.那么,我错过了什么,还是编译器库错了?

编辑,2016年8月30日:

谢谢你的回复.有几个人建议在不使用的情况下获得正确结果的替代方法result_of.我应该澄清一下,我挂在正确定义上的原因result_of是我实际上实现了最接近的合理实现,result_of它适用于前C++ 11编译器.所以,虽然我同意,我可以使用decltype或result_of<Mp(const MyClass&&)>::type在C++ 11,他们没有做什么,我需要为C++ 03.有几个人给出了正确的答案,即函数的const rvalue参数不是函数类型的一部分.这为我澄清了一些事情,我将实现我的预C++ 11,result_of这样它也会丢弃这些限定符.

c++ result-of language-lawyer c++14

20
推荐指数
2
解决办法
284
查看次数

标签 统计

c++ ×1

c++14 ×1

language-lawyer ×1

result-of ×1