尝试构造 std::thread 时出现奇怪的编译器错误:

Strange compiler error when trying to construct std::thread:

以下程序无法通过 g++ -std=c++11 -Wall -Werror test.cpp -o test.o 编译:

#include <thread>
using namespace std;

void fill(int n) {
    return;
}

int main() {
    thread test(fill, 5);
}
test.cpp:9:12: error: no matching constructor for initialization of 'std::__1::thread'
    thread test(fill, 5);
           ^    ~~~~~~~

是不是因为fill#include <algorithm>std::fill冲突了?我没有包括这个,但我想 <thread> 可能有。

将我的函数名称更改为 fillie(或几乎任何其他名称)允许它在不链接 pthread 的情况下正确编译。

我问是因为这是一条奇怪的编译器错误消息,而且它还意味着线程构造函数无法根据参数(这有道理,但需要确认)来消除我正在使用的函数的歧义。

是的,问题是因为不知道 fillstd::fill 还是你的全局 fill 函数。

解决它的一种方法是编写 ::fill 以明确使用全局的。