struct X
{
void f(double) {}
static void f(int) {}
};
int main()
{
X x;
auto y = x.f;
}
gcc 给出:
error: unable to deduce ‘auto’ from ‘x.X::f’
x.f
是5.2.5 [expr.ref] 中记录的类成员访问 postfix-expression
它有效地说:
如果
f
是(可能重载的)成员函数,函数重载决议(13.3)用于确定x.f
是指静态成员函数还是非静态成员函数。(来自 N3485 5.2.5.4.3 )
如何在此处应用重载解析 -x.f
没有用于进行重载解析的参数列表?
还是我错过了什么?
更新:如果我将auto y = x.f
行更改为expression-statement
:
- auto y = x.f;
+ x.f;
然后 gcc 反而抱怨:
error: statement cannot resolve address of overloaded function