为什么

struct MyStruct {
   auto foo () { return 1; }
   auto bar () { return foo(); }
};

进行编译,但是使用像这样的结尾返回类型时:
struct MyStruct {
   auto foo () { return 1; }
   auto bar () -> decltype(foo()) { return foo(); }
};

编译失败



在实现方面,这是正确的行为吗?

最佳答案

在第一个代码段中,我们可以推断出(有效的)返回类型,因为定义是在该词汇点上提供的,并且相反,如果the definitions are lexically swapped[dcl.spec.auto]/10一致,则将不起作用,因为我们必须禁止循环扣除。

关于第二个片段,请参见core issue 945,它有效地重新打开了core issue 643并处理了在尾随返回类型中使用的this,其中类类型仍然不完整。 AFAICS,当前的措词允许以与第一种情况相同的方式(再次给出定义的正确顺序),但要牢记公开问题1890;供应商将可疑物品的实现推迟到确认为止。

关于c++ - 类定义函数的decltype扣除结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41329074/

10-11 22:46
查看更多