3

タイトルに記載されているエラーを発生させる以下のコードがあります。これは、ここで入手できるサンプルの縮小版です。

cppリファレンス

#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 に答える