Читая проект С++ 11 n3242, раздел 20.7.2.5 выглядит, как будто у нас есть атомарные операции с shared_ptr, что позволяет нам делать блокировку на сложной структуре, не беспокоясь о утечке GC/памяти.
Однако я не смог использовать его в GCC-4.7.0. Я просто протестировал следующую программу
#include <atomic>
#include <memory>
#include <string>
struct X {
int x;
double y;
std::string s;
};
int main() {
std::shared_ptr<X> x(new X);
auto p = std::atomic_load(&x);
}
и имеет ошибку компилятора:
c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’
Кто-нибудь знает, что я пропустил здесь? Или это просто gcc еще не реализовано?