summaryrefslogtreecommitdiff
path: root/boost/proto/proto_fwd.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/proto/proto_fwd.hpp')
-rw-r--r--boost/proto/proto_fwd.hpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/boost/proto/proto_fwd.hpp b/boost/proto/proto_fwd.hpp
index 841cd752bb..6fb25bfcf5 100644
--- a/boost/proto/proto_fwd.hpp
+++ b/boost/proto/proto_fwd.hpp
@@ -92,6 +92,22 @@
# endif
#endif
+#ifndef BOOST_NO_DECLTYPE_N3276
+# // Proto can only use the decltype-based result_of if N3276 has been
+# // implemented by the compiler.
+# // See http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf
+# ifndef BOOST_PROTO_USE_NORMAL_RESULT_OF
+# define BOOST_PROTO_USE_NORMAL_RESULT_OF
+# endif
+# // If we're using the decltype-based result_of, we need to be a bit
+# // stricter about the return types of some functions.
+# ifndef BOOST_PROTO_STRICT_RESULT_OF
+# define BOOST_PROTO_STRICT_RESULT_OF
+# endif
+#endif
+
+// Unless compiler support is there, use tr1_result_of instead of
+// result_of to avoid the problems addressed by N3276.
#ifdef BOOST_PROTO_USE_NORMAL_RESULT_OF
# define BOOST_PROTO_RESULT_OF boost::result_of
#else
@@ -102,6 +118,14 @@
# define BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
#endif
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable : 4522)) // 'class' : multiple assignment operators specified
+# define BOOST_PROTO_DISABLE_MSVC_C4714 __pragma(warning(disable : 4714)) // function 'xxx' marked as __forceinline not inlined
+#else
+# define BOOST_PROTO_DISABLE_MSVC_C4522
+# define BOOST_PROTO_DISABLE_MSVC_C4714
+#endif
+
namespace boost { namespace proto
{
namespace detail
@@ -380,6 +404,8 @@ namespace boost { namespace proto
template<typename Grammar>
struct vararg;
+ struct pack;
+
// Boost bug https://svn.boost.org/trac/boost/ticket/4602
//int const N = INT_MAX;
int const N = (INT_MAX >> 10);