正如昨天的问答中所解释的那样,g ++ 4.8和Clang 3.3都正确地抱怨下面的代码,并且在这个范围内未声明"'b_'未声明"
#includeclass Test { public: Test(): b_(0) {} auto foo() const -> decltype(b_) // just leave out the -> decltype(b_) works with c++1y { return b_; } private: int b_; }; int main() { Test t; std::cout << t.foo(); }
将该private
部分移动到类定义的顶部可消除错误并打印0.
我的问题是,这个错误在C++ 14中是否会随着返回类型推断而消失,这样我就可以省略decltype
并private
在类定义的末尾使用我的部分?
注意:它实际上是基于@JesseGood的答案.
不,但不再需要这个,因为你可以说
decltype(auto) foo() const { return b_; }
这将从其正文中自动推断出返回类型.
我不这么认为,因为C++ 14会有自动返回类型扣除.以下通过传递-std=c++1y
标志来编译g ++ 4.8 .
auto foo() const { return b_; }