3

我有下面的代码,它给出了标题中提到的错误。它是此处提供的示例的精简版本:

参考

#include <thread>
#include <future>

int main()
{
    std::packaged_task<int()> task([] {return 1;});
    return 0;
}

但是,认为正如我在此处的另一个答案中指定的那样将包任务的类型指定为 int() ,那么它将被正确解决,但事实并非如此。

谁能发现我做错了什么?

4

1 回答 1

1

尝试:

g++ -E x.cpp > output.txt

它将运行预处理器,因此您可以看到编译器得到了什么。

如果我从 cygwin 运行它,std::packaged_task则输出中只存在 的预声明,而不是定义。该future文件包含以下预处理器条件:

#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
  && defined(_GLIBCXX_ATOMIC_BUILTINS_4)

在我的cygwin安装中,宏_GLIBCXX_HAS_GTHREADS没有定义,所以里面的所有东西都#if被删除了。也许同样的事情也会发生在你身上。

于 2013-10-01T18:07:36.427 回答