Boost logo

Boost-Commit :

From: john_at_[hidden]
Date: 2008-04-28 07:07:15


Author: johnmaddock
Date: 2008-04-28 07:07:14 EDT (Mon, 28 Apr 2008)
New Revision: 44842
URL: http://svn.boost.org/trac/boost/changeset/44842

Log:
Fixes for issue #1871 that prevents duplicate symbol errors with VC++ compilers, when building with /Zc:wchar_t-.
Text files modified:
   trunk/libs/regex/src/usinstances.cpp | 3 +++
   trunk/libs/regex/src/wc_regex_traits.cpp | 33 ++++++++++++++++++++++++++++++++-
   2 files changed, 35 insertions(+), 1 deletions(-)

Modified: trunk/libs/regex/src/usinstances.cpp
==============================================================================
--- trunk/libs/regex/src/usinstances.cpp (original)
+++ trunk/libs/regex/src/usinstances.cpp 2008-04-28 07:07:14 EDT (Mon, 28 Apr 2008)
@@ -49,6 +49,9 @@
 #if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
 template<> _CRTIMP2 std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
 #endif
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template _CRTIMP2 allocator<unsigned short>::allocator();
+#endif
 }
 #endif
 

Modified: trunk/libs/regex/src/wc_regex_traits.cpp
==============================================================================
--- trunk/libs/regex/src/wc_regex_traits.cpp (original)
+++ trunk/libs/regex/src/wc_regex_traits.cpp 2008-04-28 07:07:14 EDT (Mon, 28 Apr 2008)
@@ -19,9 +19,40 @@
 
 #define BOOST_REGEX_SOURCE
 
-#include <boost/config.hpp>
+#include <boost/regex/config.hpp>
 #include <boost/detail/workaround.hpp>
 
+#ifdef _DLL_CPPLIB
+//
+// This is a horrible workaround, without declaring these symbols extern we get
+// duplicate symbol errors when linking if the application is built without
+// /Zc:wchar_t
+//
+namespace std{
+template _CRTIMP2 bool __cdecl operator==(
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template _CRTIMP2 bool __cdecl operator==(
+ const unsigned short *,
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template _CRTIMP2 bool __cdecl operator==(
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+ const unsigned short *);
+template _CRTIMP2 bool __cdecl operator<(
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template _CRTIMP2 bool __cdecl operator>(
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+ const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> _CRTIMP2 std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template _CRTIMP2 allocator<unsigned short>::allocator();
+#endif
+}
+#endif
+
 #if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
 
 #include <boost/regex/v4/c_regex_traits.hpp>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk