summaryrefslogtreecommitdiff
path: root/boost/proto/extends.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/proto/extends.hpp')
-rw-r--r--boost/proto/extends.hpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/boost/proto/extends.hpp b/boost/proto/extends.hpp
index 7d5678a80d..3a8151964c 100644
--- a/boost/proto/extends.hpp
+++ b/boost/proto/extends.hpp
@@ -34,10 +34,9 @@
#include <boost/proto/generate.hpp>
#include <boost/proto/detail/remove_typename.hpp>
-#ifdef _MSC_VER
-#define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable: 4522))
-#else
-#define BOOST_PROTO_DISABLE_MSVC_C4522
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(push)
+# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif
namespace boost { namespace proto
@@ -75,7 +74,7 @@ namespace boost { namespace proto
///
#define BOOST_PROTO_DEFINE_FUN_OP_IMPL_(Z, N, DATA, Const) \
BOOST_PP_IF(N, BOOST_PROTO_TEMPLATE_YES_, BOOST_PROTO_TEMPLATE_NO_)(Z, N) \
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
typename BOOST_PROTO_RESULT_OF< \
proto_generator( \
typename boost::proto::result_of::BOOST_PP_CAT(funop, N)< \
@@ -105,7 +104,7 @@ namespace boost { namespace proto
///
#define BOOST_PROTO_DEFINE_FUN_OP_VARIADIC_IMPL_(Const) \
template<typename... A> \
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
typename BOOST_PROTO_RESULT_OF< \
proto_generator( \
typename boost::proto::result_of::funop< \
@@ -176,26 +175,26 @@ namespace boost { namespace proto
typedef boost::proto::tag::proto_expr fusion_tag; \
BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_EXTENDS_CHILD, ~) \
\
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
static proto_derived_expr const make(Expr const &e) \
{ \
proto_derived_expr that = {e}; \
return that; \
} \
\
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
proto_base_expr &proto_base() \
{ \
return this->proto_expr_.proto_base(); \
} \
\
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
proto_base_expr const &proto_base() const \
{ \
return this->proto_expr_.proto_base(); \
} \
\
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
operator proto_address_of_hack_type_() const \
{ \
return boost::addressof(this->proto_base().child0); \
@@ -209,7 +208,7 @@ namespace boost { namespace proto
#define BOOST_PROTO_EXTENDS_COPY_ASSIGN_IMPL_(This, Const, Typename) \
BOOST_PROTO_DISABLE_MSVC_C4522 \
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
Typename() BOOST_PROTO_RESULT_OF< \
Typename() This::proto_generator( \
Typename() boost::proto::base_expr< \
@@ -259,7 +258,7 @@ namespace boost { namespace proto
///
#define BOOST_PROTO_EXTENDS_ASSIGN_IMPL_(ThisConst, ThatConst) \
template<typename A> \
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
typename BOOST_PROTO_RESULT_OF< \
proto_generator( \
typename boost::proto::base_expr< \
@@ -326,7 +325,7 @@ namespace boost { namespace proto
///
#define BOOST_PROTO_EXTENDS_SUBSCRIPT_IMPL_(ThisConst, ThatConst) \
template<typename A> \
- BOOST_FORCEINLINE \
+ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \
typename BOOST_PROTO_RESULT_OF< \
proto_generator( \
typename boost::proto::base_expr< \
@@ -641,4 +640,8 @@ namespace boost { namespace proto
}}
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
#endif