Boost logo

Boost-Commit :

From: john_at_[hidden]
Date: 2008-07-18 07:29:50


Author: johnmaddock
Date: 2008-07-18 07:29:50 EDT (Fri, 18 Jul 2008)
New Revision: 47542
URL: http://svn.boost.org/trac/boost/changeset/47542

Log:
Tentative fix for some VC failures.
Text files modified:
   trunk/libs/regex/src/wc_regex_traits.cpp | 44 ++++++++++++++++++++++++++-------------
   1 files changed, 29 insertions(+), 15 deletions(-)

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-07-18 07:29:50 EDT (Fri, 18 Jul 2008)
@@ -19,42 +19,56 @@
 
 #define BOOST_REGEX_SOURCE
 
-#include <boost/regex/config.hpp>
 #include <boost/detail/workaround.hpp>
-
-#ifdef _DLL_CPPLIB
 #include <memory>
 #include <string>
+
+#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE)
 //
-// This is a horrible workaround, without declaring these symbols extern we get
+// This is a horrible workaround, but without declaring these symbols extern we get
 // duplicate symbol errors when linking if the application is built without
 // /Zc:wchar_t
 //
+#ifdef _CRTIMP2_PURE
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE
+#else
+# define BOOST_REGEX_STDLIB_DECL _CRTIMP2
+#endif
+
 namespace std{
-template _CRTIMP2 bool __cdecl operator==(
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template BOOST_REGEX_STDLIB_DECL allocator<unsigned short>::allocator();
+template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >;
+template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>,
+ allocator<unsigned short> >;
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+
+template BOOST_REGEX_STDLIB_DECL 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==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const unsigned short *,
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
-template _CRTIMP2 bool __cdecl operator==(
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
    const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
    const unsigned short *);
-template _CRTIMP2 bool __cdecl operator<(
+template BOOST_REGEX_STDLIB_DECL 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>(
+template BOOST_REGEX_STDLIB_DECL 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
 
+#include <boost/regex/config.hpp>
+#include <boost/detail/workaround.hpp>
+
 #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