/*=============================================================================
Copyright (c) 2014 Eric Niebler
- Copyright (c) 2014 Kohei Takahashi
+ Copyright (c) 2014,2015,2018 Kohei Takahashi
Distributed under 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)
#define BOOST_FUSION_CONSTEXPR_THIS BOOST_CONSTEXPR
#endif
+
+// Workaround for compilers not implementing N3031 (DR743 and DR950).
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1913)) || \
+ BOOST_WORKAROUND(BOOST_GCC, < 40700) || \
+ defined(BOOST_CLANG) && (__clang_major__ == 3 && __clang_minor__ == 0)
+# if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename T>
+ using type_alias_t = T;
+}}}
+# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
+ boost::fusion::detail::type_alias_t<decltype parenthesized_expr>
+# else
+# include <boost/mpl/identity.hpp>
+# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
+ boost::mpl::identity<decltype parenthesized_expr>::type
+# endif
+#else
+# define BOOST_FUSION_DECLTYPE_N3031(parenthesized_expr) \
+ decltype parenthesized_expr
+#endif
+
+
+// Workaround for GCC 4.6 that rejects defaulted function with noexcept.
+#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 406)
+# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED
+#else
+# define BOOST_FUSION_NOEXCEPT_ON_DEFAULTED BOOST_NOEXCEPT
+#endif
+
#endif