SSCCE我的问题是:
class Callee
{
public:
int m1()
{
return 5;
}
constexpr static int (Callee::*method)() = &Callee::m1;
};
template <class O> int call(O &o, int (O::*m)())
{
return (o.*m)();
}
int main()
{
Callee callee;
return
(callee.*Callee::method)() // works fine
*
call<Callee>(callee, Callee::method) // causes undefined reference in GCC
;
}
此代码在clang(3.4-1)中编译但在gcc(4.8.4)中失败,并带有消息:
undefined reference to `Callee::method'
更短,我可以通过它的指针直接调用一些类方法,但我无法通过模板化函数调用它。 (现在比我继承 Callee 更不清楚,因为两种方法都可以正常工作)为什么?