【发布时间】:2013-05-27 04:04:26
【问题描述】:
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
它给出了以下错误:
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
但是,如果我将 data 放在 func() 上方,则不会出现错误 (live code):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
所以我的问题是,为什么decltype 不考虑在它之后声明的成员(当decltype 用于方法声明而不是定义时)?我还想知道在语言标准的未来迭代中这种行为是否有任何变化。
请注意,我之所以问这个问题是因为我希望
decltype 表现得不同。我的编码约定是将类数据成员放在类函数下方。当然,这种不同的行为会影响我组织班级成员的方式。如果您能提供任何可以保留我的编码约定的解决方法,我将不胜感激。
【问题讨论】:
-
对不起——C++的本质,继承自C。
-
不只是
decltype,即使是简单的typedef也会显示same behavior。将typedef移到成员函数定义上方显然可以解决问题。 -
@Praetorian 所以这是一个固有的问题......太糟糕了。
-
@Mark Garcia,这实际上是有好处的,它迫使程序员编写可理解的代码。