类方法的返回类型推导?C++ 1Y

Tim*_*ine 5 c++ gcc return-type-deduction c++14

是否允许c ++ 14中的成员函数返回类型推导,或仅适用于自由函数?

我问,因为我有点暗示它会起作用,但是在gcc 4.8.1中我得到一个内部编译器错误("在gen_type_die_with_usage中").我第一次遇到这样一个神秘的错误,所以我有点怀疑; 我知道他们从那时起就改变了规范.

为清楚起见,这对我有用:

auto foo() {return 5;}
Run Code Online (Sandbox Code Playgroud)

但这不是:

class Bar{
auto baz() {return 5;}
}
Run Code Online (Sandbox Code Playgroud)

标准草案允许这样做吗?

aar*_*man 5

是的,根据文件n3582,该标准应该允许它。这是本文的一个例子。

严格地不需要使用自动返回类型来允许非定义的函数声明,但是对于喜欢在类外定义成员函数的编码样式很有用:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }
Run Code Online (Sandbox Code Playgroud)

如果在这种情况下允许它,则在其他情况下也应该有效。允许它也是更正交的选择。总的来说,我相信如果将两个功能组合在一起可以起作用,那么它应该起作用。

根据@bamboon的评论,“从gcc 4.9开始仅支持返回类型推断。” 这样就可以解释为什么您没有它。