传递指向成员函数的指针在 MinGW-w64 中编译但在 gcc 中不编译

Pass pointer to member function compiles in MinGW-w64 but not in gcc

我有一个带有 run() 非静态成员函数的 Worker 对象。

已创建对象:

Worker * worker = new Worker();

正在做:

std::thread(Worker::run, worker);

在 MinGW-w64 (gcc 4.9.1) 下编译(一个作品)但在 Ubuntu linux (gcc 5.2.1) 下,我得到编译错误:

Invalid use of non-static member function

代码用-std=gnu++11

编译

我知道在 MinGW 的情况下,指向成员函数的指针有一个带有某种 Worker * this 参数的签名,允许像静态函数指针一样使用它。为什么 linux 5.2.1 gcc 禁止这样做,我应该怎么写?

EDIT :我可以使用 lambda 或在 Worker::run 之前添加 & 来解决这个问题,但问题是为什么它被各种接受或不接受gcc 版本仍然存在。这是 MinGW 或 gcc 4.9.1 错误吗?

您需要使用

std::thread(&Worker::run, worker);

live example