From 954cdb5e46cddfb56dc90717d4a2fbd3de7f6ed7 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Mon, 21 Apr 2014 09:39:19 +0100 Subject: [PATCH] Add fix for https://svn.boost.org/trac/boost/ticket/9474 --- include/boost/type_traits/has_new_operator.hpp | 14 ++++++++++++++ test/has_operator_new_test.cpp | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/boost/type_traits/has_new_operator.hpp b/include/boost/type_traits/has_new_operator.hpp index 2c2c322..c615127 100644 --- a/include/boost/type_traits/has_new_operator.hpp +++ b/include/boost/type_traits/has_new_operator.hpp @@ -18,6 +18,16 @@ // should be the last #include #include +#if defined(new) +# if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) +# define BOOST_TT_AUX_MACRO_NEW_DEFINED +# pragma push_macro("new") +# undef new +# else +# error "Sorry but you can't include this header if 'new' is defined as a macro." +# endif +#endif + namespace boost { namespace detail { template @@ -135,6 +145,10 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_new_operator,T,::boost::detail::has_new_operato } // namespace boost +#if defined(BOOST_TT_AUX_MACRO_NEW_DEFINED) +# pragma pop_macro("new") +#endif + #include #endif // BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED diff --git a/test/has_operator_new_test.cpp b/test/has_operator_new_test.cpp index 5d24350..22d54c6 100644 --- a/test/has_operator_new_test.cpp +++ b/test/has_operator_new_test.cpp @@ -14,6 +14,17 @@ #pragma warning(disable:1720) #endif +#if defined(new) +# if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) +# define BOOST_TT_AUX_MACRO_NEW_DEFINED +# pragma push_macro("new") +# undef new +# else +# error "Sorry but you can't include this header if 'new' is defined as a macro." +# endif +#endif + + struct class_with_new_op { void * operator new(std::size_t); };