我有以下代码,它给出了标题中提到的错误。它是此处可用样本的简化版本:
#include <thread>
#include <future>
int main()
{
std::packaged_task<int()> task([] {return 1;});
return 0;
}
但是,我认为正如我在另一个答案中指定的那样将包任务的类型指定为int(),那么它将被正确解析但不是。
有人能发现我做错了吗?
答案 0 :(得分: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
内的所有内容都被删除了。也许同样的事情发生在你身上。