diff --git a/include/boost/move/algo/detail/merge.hpp b/include/boost/move/algo/detail/merge.hpp index 852688b..933aa31 100644 --- a/include/boost/move/algo/detail/merge.hpp +++ b/include/boost/move/algo/detail/merge.hpp @@ -121,7 +121,7 @@ class adaptive_xbuf { BOOST_ASSERT(m_size < m_capacity); if(m_size < sz){ - BOOST_TRY + BOOST_MOVE_TRY { ::new((void*)&m_ptr[m_size]) T(::boost::move(t)); ++m_size; @@ -130,7 +130,7 @@ class adaptive_xbuf } t = ::boost::move(m_ptr[m_size-1]); } - BOOST_CATCH(...) + BOOST_MOVE_CATCH(...) { while(m_size) { @@ -138,7 +138,7 @@ class adaptive_xbuf m_ptr[m_size].~T(); } } - BOOST_CATCH_END + BOOST_MOVE_CATCH_END } } diff --git a/include/boost/move/algo/move.hpp b/include/boost/move/algo/move.hpp index 1c97c89..9a3eacc 100644 --- a/include/boost/move/algo/move.hpp +++ b/include/boost/move/algo/move.hpp @@ -28,7 +28,6 @@ #include #include #include -#include #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) #include #endif @@ -122,20 +121,20 @@ F uninitialized_move(I f, I l, F r typedef typename boost::movelib::iterator_traits::value_type input_value_type; F back = r; - BOOST_TRY{ + BOOST_MOVE_TRY{ while (f != l) { void * const addr = static_cast(::boost::move_detail::addressof(*r)); ::new(addr) input_value_type(::boost::move(*f)); ++f; ++r; } } - BOOST_CATCH(...){ + BOOST_MOVE_CATCH(...){ for (; back != r; ++back){ boost::movelib::iterator_to_raw_pointer(back)->~input_value_type(); } - BOOST_RETHROW; + BOOST_MOVE_RETHROW; } - BOOST_CATCH_END + BOOST_MOVE_CATCH_END return r; } diff --git a/include/boost/move/algorithm.hpp b/include/boost/move/algorithm.hpp index 880d661..67a6906 100644 --- a/include/boost/move/algorithm.hpp +++ b/include/boost/move/algorithm.hpp @@ -27,7 +27,6 @@ #include #include #include -#include #include //copy, copy_backward #include //uninitialized_copy diff --git a/include/boost/move/detail/workaround.hpp b/include/boost/move/detail/workaround.hpp index c3570e6..e81739e 100644 --- a/include/boost/move/detail/workaround.hpp +++ b/include/boost/move/detail/workaround.hpp @@ -77,5 +77,31 @@ BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore(T1 const&) }} //namespace boost::movelib { +#if !(defined BOOST_NO_EXCEPTIONS) +# define BOOST_MOVE_TRY { try +# define BOOST_MOVE_CATCH(x) catch(x) +# define BOOST_MOVE_RETHROW throw; +# define BOOST_MOVE_CATCH_END } +#else +# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1900 +# define BOOST_MOVE_TRY { if (true) +# define BOOST_MOVE_CATCH(x) else if (false) +# else +// warning C4127: conditional expression is constant +# define BOOST_MOVE_TRY { \ + __pragma(warning(push)) \ + __pragma(warning(disable: 4127)) \ + if (true) \ + __pragma(warning(pop)) +# define BOOST_MOVE_CATCH(x) else \ + __pragma(warning(push)) \ + __pragma(warning(disable: 4127)) \ + if (false) \ + __pragma(warning(pop)) +# endif +# define BOOST_MOVE_RETHROW +# define BOOST_MOVE_CATCH_END } +#endif + #endif //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP