24/10/30 07:03:45.19 o3z0lAnP.net
>>949
ラムダ式の返却値の型は省略すると return に与えた式から推論され、推論結果は参照にはならない。
つまり []{ return ready; } は []->std::atomic<bool>{ return ready; } と書いたのと同じということ。
これだと値を返すときにコピーが発生するのでコピーコンストラクタが必要 (だけど実際には無い) ということになってしまう。
解決方法としては load を呼ぶというのは妥当な方法のひとつだけど、
返却値として bool を明示する、つまり []->bool { return ready; } とするのでもよいし、
キャストを書いて [] { return static_cast<bool>(ready); } というようにするのでも良い。
見栄えからすると [] { return bool(ready); } のほうが綺麗かな?