class A {
int f(int x, int j) { return 2;}
decltype(f)* p;
};
给我错误:
error: decltype cannot resolve address of overloaded function
我无法理解为什么这个错误甚至会说到重载函数。同样,我认为可能需要使用范围运算符来访问该函数:
class A {
int f(int x, int j) { return 2;}
decltype(A::f)* p;
};
这仍然给我一个错误但更清晰的描述:
error: invalid use of non-static member function 'int A::f(int, int)'
为什么我不允许使用decltype来查找成员函数的类型?或者,将成员函数设置为static
可以在任何一种情况下删除错误。
答案 0 :(得分:9)
你真正想要的是:
struct a {
int f(int x, int j) { return 2;}
decltype(&a::f) p;
};
由于您所指的f
是成员函数。推导出的类型是:
int(a::*)(int, int)
如果没有&
,编译器会假设您正在尝试调用该函数而不向其提供参数。也许Clang的错误信息更清楚:
error: call to non-static member function without an object argument decltype(a::f) p;
如果您真的不想要指针类型,可以稍后从std::remove_pointer_t
应用<type_traits>
。