атомарные операции над общими указателями, версии c ++ - PullRequest
1 голос
/ 14 мая 2019

Я работал над этим потоком Обмен объектов карты C ++ в многопоточной среде

Тем не менее,

#include <memory>
#include <thread>
#include <chrono>
#include <atomic>
#include <iostream>
using namespace std;

shared_ptr<std::string> the_string;

int main()
{
     atomic_store(&the_string, std::make_shared<std::string>("first string"));
}     

выдает ошибку времени компиляции

error: no matching function for call to 'atomic_store'
     atomic_store(&the_string, std::make_shared<std::string>("first string"));
     ^~~~~~~~~~~~
/Library/Developer/CommandLineTools/usr/include/c++/v1/atomic:1165:1: note: candidate template ignored: could not match 'atomic' against 'shared_ptr'
atomic_store(volatile atomic<_Tp>* __o, _Tp __d) _NOEXCEPT

Я видел несколько потоков по этой проблеме и понимаю, что это может быть связано с версией C ++, которую у меня есть /usr/include/c++/4.2.1/ и /usr/include/c++/4.8.5/ в другом окне, оба вызывают одну и ту же проблему. Должен ли я обновить версию C ++?

Я решил эту проблему, передав флаг -std = c ++ 11.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Я решил эту проблему, передав флаг -std = c ++ 11

0 голосов
/ 14 мая 2019

Он прекрасно компилируется здесь с GCC 8.3 и Clang 8.0, так что да, вам следует обновить ваш компилятор.

...