为什么
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/