为什么我得到一个“变量'std :: packaged_task <int> task'有初始化器但是类型不完整”错误</int>

时间:2013-10-01 16:14:21

标签: c++ c++11

我有以下代码,它给出了标题中提到的错误。它是此处可用样本的简化版本:

cppreference

#include <thread>
#include <future>

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

但是,我认为正如我在另一个答案中指定的那样将包任务的类型指定为int(),那么它将被正确解析但不是。

有人能发现我做错了吗?

1 个答案:

答案 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内的所有内容都被删除了。也许同样的事情发生在你身上。