ฉันทำงานในโครงการที่มี 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
คุณใช้คอมไพเลอร์ / ไลบรารีมาตรฐาน / แพลตฟอร์มใด
—
Victor Gubin
@VictorGubin ฉันลองกับ Clang และ GCC บน Linux (Wandbox) ฉันลองใช้เวอร์ชั่นอื่น
—
โทมัส Sablik
คุณสามารถทำให้ MCVE เป็นแบบโลคอลภายใน
—
ปีเตอร์ Cordes
main
(หรือฟังก์ชั่นใด ๆ โดยไม่จำเป็นต้องเป็นmain
) แทนที่จะเป็นตัวสร้าง struct เสียงดังกราวให้เกิดข้อผิดพลาดที่คล้ายกันเป็นที่ชัดเจนมากขึ้นว่ามันพยายามที่จะใช้ที่ถูกลบสำเนาคอนสตรัคแทนการเริ่มต้นหรือคอนสตรัคธรรมดา: godbolt.org/z/SBGf9wกับ libc ++
@PeterCordes ฉันไม่แน่ใจว่าข้อผิดพลาดนี้เกี่ยวข้องกับการเริ่มต้นคลาสหรือไม่
—
โทมัส Sablik
การได้รับข้อความแสดงข้อผิดพลาดเดียวกันสำหรับตัวอย่างที่ทำซ้ำได้ง่ายน้อยที่สุดพิสูจน์ได้ว่าไม่ใช่ ฉันไม่แน่ใจจนกว่าจะลอง
—
Peter Cordes