类方法声明中的 decltype:在声明成员之前使用时出错"referenced"
decltype in class method declaration: error when used before "referenced" member is declared
考虑以下代码:
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()
上面,它没有给出错误(活动代码):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
所以我的问题是,为什么decltype
不考虑在它之后声明的成员(当decltype
在方法声明中使用时,而不是在定义中)?我还想知道在语言标准的未来迭代中,这种行为是否有任何变化。
请注意,我问这个是因为我期待
decltype
的行为不同。我的编码惯例是将类数据成员放在类函数下面。当然,这种不同的行为会影响我组织班级成员的方式。后面的返回类型是成员函数声明的一部分,它不能访问在它之后声明的数据成员或成员函数,而成员函数定义可以访问。我不知道c++ 14中这种行为有任何变化。
参见c++ 11标准的3.4.1-7,非限定名查找:
在成员函数体之外的类X 定义或嵌套类定义中使用的名称应以下列方式之一声明:
- 在类X中使用之前,或者是X的基类(10.2)的成员,或者…
(强调我的)
相关文章:
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 在 mingw64- 变量下的窗口中编译 openvpn3 时出错,未在范围内声明
- 在循环中重新声明 for 循环变量时出错
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 使用输出在声明容差范围内的EXPECT_NEAR时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 在同一命名空间中声明变量和函数是否出错?[C++]
- 在范围内声明时出错
- 在声明类类型的QVector时出错
- "Undefined reference to"使用双模板类声明对象时出错
- 编译向导生成的MFC应用程序时出错;缺少CDocument声明
- 当从c切换到c++时,c++中带有双指针的函数声明和定义会出错
- 尝试在头文件上私下声明向量时出错
- 声明类类型变量时出错
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- C++出错:尚未声明object_var
- 编译时类中未声明任何成员函数时出错
- LNK2005在.hpp文件中声明函数时出错