
Helge Bahmann wrote:
Hi Jamie,
On Wed, 3 Mar 2010, Jamie Allsop wrote:
With gcc 4.1.2 (gcc 4.3.x is fine) I am seeing this linker error:
.build/debug/working/SourceOne.o: In function `void boost::detail::atomic::platform_atomic_thread_fence<boost::memory_order>(boost::memory_order)':
/thirdparty/boost/boost_1_42/boost/smart_ptr/detail/shared_count.hpp:229: multiple definition of `void boost::detail::atomic::platform_atomic_thread_fence<boost::memory_order>(boost::memory_order)'
.build/debug/working/SourceTwo.o: /thirdparty/boost/boost_1_42/boost/atomic/detail/gcc-x86.hpp:63: first defined here
[...]
Is this a compiler error or should the specialisation be declared as:
template<> inline void platform_atomic_thread_fence(memory_order order)
you are right, it should have been specialized this way. I have however reorganized my development tree such that this is now handled differently (macros instead of via template specialization), so if you are patient until saturday, this will be resolved.
I patched my copy locally so no rush for me. However I'm curious as to why you'd use a macro when a template would do? Or is it that your changes preclude using templates or other language facilities? I guess I can have a look on Saturday ;) Thanks for the response, Jamie