次のコードはリンクに失敗します:
#include <atomic>
struct A
{
unsigned long a;
unsigned long b;
};
struct B
{
void set(A tmp)
{
_a.store(tmp);
}
std::atomic<A> _a;
};
int main()
{
B b;
b.set(A());
return 0;
}
次のエラーが発生します。
/tmp/cc8gyaZM.o: In function `std::atomic<A>::store(A, std::memory_order)':
dryn.cpp: (.text._ZNSt6atomicI1AE5storeES0_St12memory_order[_ZNSt6atomicI1AE5storeES0_St12memory_order]+0x3e): undefined reference to `__atomic_store_16'
unsigned long-s を int までのサイズのものに置き換えると、問題なくコンパイルされます。g++ 4.7.2 を使用。それがなぜなのか分かりますか?
コマンドでコンパイル:
g++ dryn.cpp --std=c++11