Я хочу использовать атомную переменную на карте. Я использую Visual Studio 2012 (msvc-11) и gcc 4.7. Я определил тип:std :: atomic как значение std :: map
typedef std::map<uint64_t, std::atomic<int64_t>> value_map_t;
В MSVC-11, линии
value_map_t map;
map[1] = 0;
ошибка продукции:
error C2248:
std::atomic<__int64>::atomic
: cannot access private member declared in classstd::atomic<__int64>
То же самое происходит с GCC 4.7 (see here)
error: use of deleted function
std::atomic<long int>::atomic(const std::atomic<long int>&)
Однако, в Visual Studio 2013 (msvc-12) и выше, а также в gcc 4.8 и новее, он работает нормально.
Смотрите сами gcc 4.8 и Visual Studio 2013+
Что я могу сделать в MSVC-11/GCC 4.7, чтобы сделать его работу?
'станд: : atomic' - это функция C++ 11, вы, вероятно, не должны ожидать, что эти вещи будут работать очень хорошо, если вы не захотите использовать компилятор, предлагающий надежную поддержку для C++ 11. Оба gcc 4.7 и msvc-11 были довольно пятнистыми в этом отношении. –