/* * * Copyright (c) 1998-2004 * John Maddock * * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) * */ /* * LOCATION: see http://www.boost.org for most recent version. * FILE regex_workarounds.cpp * VERSION see * DESCRIPTION: Declares Misc workarounds. */ #ifndef BOOST_REGEX_WORKAROUND_HPP #define BOOST_REGEX_WORKAROUND_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef BOOST_NO_STD_LOCALE # include #endif namespace boost{ namespace re_detail{ #ifdef BOOST_NO_STD_DISTANCE template std::ptrdiff_t distance(const T& x, const T& y) { return y - x; } #else using std::distance; #endif }} #ifdef BOOST_REGEX_NO_BOOL # define BOOST_REGEX_MAKE_BOOL(x) static_cast((x) ? true : false) #else # ifdef BOOST_MSVC // warning suppression with VC6: # pragma warning(disable: 4800) # pragma warning(disable: 4786) # endif # define BOOST_REGEX_MAKE_BOOL(x) static_cast(x) #endif /***************************************************************************** * * Fix broken broken namespace support: * ****************************************************************************/ #if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus) namespace std{ using ::ptrdiff_t; using ::size_t; using ::abs; using ::memset; using ::memcpy; } #endif /***************************************************************************** * * helper functions pointer_construct/pointer_destroy: * ****************************************************************************/ #ifdef __cplusplus namespace boost{ namespace re_detail{ #ifdef BOOST_MSVC #pragma warning (push) #pragma warning (disable : 4100) #endif template inline void pointer_destroy(T* p) { p->~T(); (void)p; } #ifdef BOOST_MSVC #pragma warning (pop) #endif template inline void pointer_construct(T* p, const T& t) { new (p) T(t); } }} // namespaces #endif #endif // include guard