Pracuję w projekcie z C ++ 11 i próbowałem śledzić kod
#include <atomic>
struct A {
std::atomic_int idx = 1;
};
int main() {
return 0;
}
Otrzymuję błąd kompilatora
error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]'
std::atomic_int idx = 1;
^
Ten sam wynik jest w przypadku C ++ 14. Po przejściu na C ++ 17 działa: wandbox
Sprawdziłem preferencje pod kątem różnic:
Ale nie ma udokumentowanej różnicy między C ++ 14 a C ++ 17. Dlaczego działa z C ++ 17, a nie z C ++ 14?
main
(lub dowolnej funkcji, nie ma takiej potrzeby main
), zamiast do konstruktora struct. Clang podaje podobny komunikat o błędzie, mówiąc bardziej wyraźnie, że próbuje użyć skasowanego konstruktora kopii zamiast inicjatora lub zwykłego konstruktora: godbolt.org/z/SBGf9w z libc ++