我在使用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 ++ 17一起使用而不与C ++ 14一起使用?
您使用什么编译器/标准库/平台?
—
维克多·古宾
@VictorGubin我在Linux(Wandbox)上尝试了Clang和GCC。我尝试了不同的版本。
—
Thomas Sablik
您可以将MCVE简化为仅本地
—
Peter Cordes
main
变量(或任何函数,不需要main
),而不是struct构造函数。Clang给出了类似的错误消息,更明确地表明它正在尝试使用已删除的副本构造函数而不是初始化构造函数或普通构造函数:godbolt.org/z/SBGf9w with libc ++
@PeterCordes我不确定此错误是否与类初始化有关。
—
Thomas Sablik