При выполнении инициализации элемента для непереписываемой переменной (такой как std::atomic<int>
), он должен использовать direct-initialization
вместо copy-initialization
в соответствии с ответом здесь. Однако, когда я включаю -std=c++17
в g++ 7.4.0
, кажется, что последний тоже хорошо работает.
#include <atomic>
class A {
std::atomic<int> a = 0; // copy-initialization
std::atomic<int> b{0}; // direct-initialization
};
$ g++ -c atomic.cc -std=c++11 // or c++14
atomic.cc:4:26: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)
std::atomic<int> a = 0; // copy-initialization
$ g++ -c atomic.cc -std=c++17
// no error
Это также не удалось при компиляции с g++ 6.5.0
даже с -std=c++17
. Какой из них здесь правильный?