指向类成员的静态指针会导致未定义的引用

时间:2016-12-15 16:23:23

标签: c++ templates gcc4

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 更不清楚,因为两种方法都可以正常工作)为什么?

0 个答案:

没有答案