C ++ 11のプロジェクトで作業していて、次のコードを試してみました
#include <atomic>
struct A {
std::atomic_int idx = 1;
};
int main() {
return 0;
}
コンパイラエラーが発生する
error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]'
std::atomic_int idx = 1;
^
C ++ 14でも同じ結果になります。C ++ 17に切り替えると機能します:wandbox
私はcppreferenceの違いをチェックしました:
しかし、C ++ 14とC ++ 17の間に文書化された違いはありません。C ++ 14ではなくC ++ 17で動作するのはなぜですか?
どのコンパイラ/標準ライブラリ/プラットフォームを使用していますか?
—
Victor Gubin
@VictorGubin Linux(Wandbox)でClangとGCCを試してみました。別のバージョンを試しました。
—
Thomas Sablik
構造体コンストラクタの代わりに、MCVEを単純にローカルイン
—
Peter Cordes
main
(または関数である必要はないmain
)に単純化できます。Clangが同様のエラーメッセージを表示し、イニシャライザまたはプレーンコンストラクタの代わりに削除されたコピーコンストラクタを使用しようとしていることをより明確にします:godbolt.org/z/SBGf9w with libc ++
@PeterCordesこのエラーがクラスの初期化に関連しているかどうかはわかりませんでした。
—
トーマスサブリック
簡単な最小限の再現可能な例で同じエラーメッセージを取得すると、そうではありません。やってみないと分からなかった。
—
Peter Cordes