私は原子メンバ変数を持つクラスを持っている:C++ 11:アブソリュート<bool>メンバーの書き込みコンストラクタを書き込みますか?
struct Foo
{
std::atomic<bool> bar;
/* ... lots of other stuff, not relevant here ... */
Foo()
: bar(false)
{}
/* Trivial implementation fails in gcc 4.7 with:
* error: use of deleted function ‘std::atomic<bool>::atomic(const td::atomic<bool>&)’
*/
Foo(Foo&& other)
: bar(other.bar)
{}
};
Foo f;
Foo f2(std::move(f)); // use the move
がどのようにコンストラクタを見て移動すべきですか?
のgcc 4.7(other.bar
周りstd::move()
を追加するような)私の試みのいずれかを好きではないとネットが
おかげで、 'バー(other.bar.loadは())'今コンパイルしています適切なソリューションです! – Chris
_So、あなたのコードはコンパイルする必要があります。いいえ、 'atomic'には削除されたコピーコンストラクタがあり、オーバーロードの解決は 'atomic(T)'コンストラクタではありません。キャストまたはロードが必要です。 –
@Jonathan大丈夫ですが、私はコピーコンストラクタが削除され、 '演算子T 'があることを知っているとき、コンパイラは次のコンストラクタ(T)を続けると思っていました。これは、 '(T)'のアトミックコンストラクタが 'constexpr'なので、' explicit'コンストラクタと同様に動作し、暗黙のコンバートは明示的(またはこの場合は 'constexpr')でなければなりませんか? –