C++參考說:http://en.cppreference.com/w/cpp/atomic/atomic的std ::原子平凡能夠複製結構
std::atomic may be instantiated with any TriviallyCopyable type T
然而下面的示例下的g ++ 6.2.0
#include <atomic>
#include <functional>
struct Test11 {
int x;
};
struct Test12 {
char x;
};
struct Test13 {
long x;
};
struct Test2 {
char x;
int y;
};
struct Test3 {
int y;
long x;
};
template<typename T, typename... ARGS>
void test(ARGS&& ... args) {
static_assert(std::is_trivially_copyable<T>::value);
std::atomic<T> a;
a.store(T{std::forward<ARGS>(args)...});
}
int main() {
test<Test11>(1);
test<Test12>('\1');
test<Test13>(1L);
test<Test2>('\1',2);
test<Test3>(1,2L);
return 0;
}
編譯不起作用:g++-6 -std=c++14 -latomic test.cpp
/tmp/cchademz.o: In function
std::atomic<Test3>::store(Test3, std::memory_order)
: test.cpp:(.text._ZNSt6atomicI5Test3E5storeES0_St12memory_order[_ZNSt6atomicI5Test3E5storeES0_St12memory_order]+0x3e): undefined reference to__atomic_store_16
collect2: error: ld returned 1 exit status
g++-6 --version
g++ (Ubuntu 6.2.0-7ubuntu11) 6.2.0 20161018
特別是我不明白爲什麼Test2
有效,但Test3
沒有。
任何想法?
編輯:添加-latomic標誌和g ++版本
您是否嘗試在編輯行末尾添加'-latomic'偶然?代碼使用'-latomic'(g ++ 6.2)編譯coliru:http://coliru.stacked-crooked.com/a/fd421bd3d1715897 – Holt
您可以嘗試使用代替嗎? –
將'-latomic'移動到最後工作。但爲什麼? – WaeCo