There is a strange code-generation bug with VC++ 8 & 9 in DLL compilation mode (/MD, /MDd), whereby the linker complains of multiple instances of std::allocator<>::allocate() and std::allocator<>::deallocate(). This has seemed to manifest with sues of stlsoft::auto_buffer.
The workaround to this is to
#include <pantheios/util/memory/auto_buffer_selector.hpp> rather than <stlsoft/memory/auto_buffer.hpp>, and then derive the required specialisation via the generator template.For example, where you might formerly have done
#include <stlsoft/memory/auto_buffer.hpp>
. . .
stlsoft::auto_buffer<char, 200> buff(10);
you would now do
#include <pantheios/util/memory/auto_buffer_selector.hpp>
. . .
pantheios::auto_buffer_selector<char, 200>::type buff(10);
In using the latter form another allocator type -
stlsoft::malloc_allocator - will be used, and the multiple symbols problem will be avoided.The next version of STLSoft - 1.9.32 - will also contain an analogous workaround, which will then be automatically propagated to all other dependent libraries (the bug's also been seen in shwild).
Cheers
Matt