diff --git a/src/usinstances.cpp b/src/usinstances.cpp index e633659e..390cd254 100644 --- a/src/usinstances.cpp +++ b/src/usinstances.cpp @@ -18,46 +18,59 @@ #define BOOST_REGEX_SOURCE +#include +#include +#include + +#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) \ + && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)) +// +// 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{ + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +template class BOOST_REGEX_STDLIB_DECL allocator; +template class BOOST_REGEX_STDLIB_DECL _String_val >; +template class BOOST_REGEX_STDLIB_DECL basic_string, + allocator >; +#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::length(unsigned short const*); +#endif + +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string, allocator >&, + const basic_string, allocator >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const unsigned short *, + const basic_string, allocator >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==( + const basic_string, allocator >&, + const unsigned short *); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<( + const basic_string, allocator >&, + const basic_string, allocator >&); +template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>( + const basic_string, allocator >&, + const basic_string, allocator >&); +} +#endif + #include #if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES) #define BOOST_REGEX_US_INSTANTIATE -#ifdef _DLL_CPPLIB -#include -#include -#include -// -// 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, allocator >&, - const basic_string, allocator >&); -template _CRTIMP2 bool __cdecl operator==( - const unsigned short *, - const basic_string, allocator >&); -template _CRTIMP2 bool __cdecl operator==( - const basic_string, allocator >&, - const unsigned short *); -template _CRTIMP2 bool __cdecl operator<( - const basic_string, allocator >&, - const basic_string, allocator >&); -template _CRTIMP2 bool __cdecl operator>( - const basic_string, allocator >&, - const basic_string, allocator >&); -#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) -template<> _CRTIMP2 std::size_t __cdecl char_traits::length(unsigned short const*); -#endif -#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) -template _CRTIMP2 allocator::allocator(); -#endif -} -#endif - - #include #endif