mbe*_*dev 6 c++ decltype auto c++11 trailing-return-type
当我尝试decltype()在私有方法函数上使用时,我得到私有方法的错误error: 'm1' has not been declared in this scope
#include <stdint.h>
class C
{
public:
C()=default;
~C()=default;
auto masterMethod(int opMode) ->decltype(m1())
{
switch(opMode)
{
case 1:
return m1(); break;
case 2:
return m2(); break;
default:
return m1(); break;
}
}
private:
int m1() {return 1;}
int m2() {return 2;}
};
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,为什么编译器不在类的私有部分中查找,因为删除尾随返回类型或将私有部分放在顶部masterMethod解决了问题(decltype(auto)[如果允许C++ 14]也是正确的自动返回类型扣除).
此外,当删除decltype(m1())when m1()并m2()具有相同的返回类型时,它是不好的行为,因为这也适合我吗?
这private与尾随返回类型无关.
这里的问题是,虽然在一个类中的所有声明的名称是在范围机构的成员函数,尾随类型不是函数体的一部分-这是原型的一部分.
以下是同一问题的一个小得多的例子:
struct A
{
T f();
using T = int;
};
Run Code Online (Sandbox Code Playgroud)
而g ++说
error: 'T' does not name a type
Run Code Online (Sandbox Code Playgroud)
但这很好:
struct A
{
using T = int;
T f();
};
Run Code Online (Sandbox Code Playgroud)
唯一的解决方案是改变声明的顺序.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |