#include template class MyAtomic; template bool operator == (MyAtomic & d1, T &d2); template bool operator == (MyAtomic & d1, MyAtomic &d2); template class MyAtomic { public: MyAtomic() {}; MyAtomic(const T & d) { data.store(d); }; MyAtomic(const MyAtomic & d) { data.store(d.data.load()); }; MyAtomic& operator =(T d) { data.store(d); return *this; }; MyAtomic& operator =(MyAtomic & d) { data.store(d.data.load()); return *this; }; MyAtomic& operator +=(T d) { data.fetch_add(d); return *this; }; MyAtomic& operator +=(MyAtomic & d) { data.fetch_add(d); return *this; }; operator int() { return data.load(); } friend bool operator == (MyAtomic &d1, T &d2); friend bool operator == (MyAtomic &d1, MyAtomic &d2); private: std::atomic data; }; template bool operator == (MyAtomic & d1, T &d2) { if (d1.data.load() == d2) return true; else return false; } template bool operator == (MyAtomic & d1, MyAtomic & d2) { if (d1.data.load() == d2.load()) return true; else return false; }