summaryrefslogtreecommitdiff
path: root/boost/hana/detail
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:24:45 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:24:45 +0900
commit5ce1cfc2525b06c0a9e38531813781de0281c96d (patch)
tree19cc66c6cf6396db288813b2558cc350f1deede2 /boost/hana/detail
parent3c1df2168531ad5580076ae08d529054689aeedd (diff)
downloadboost-5ce1cfc2525b06c0a9e38531813781de0281c96d.tar.gz
boost-5ce1cfc2525b06c0a9e38531813781de0281c96d.tar.bz2
boost-5ce1cfc2525b06c0a9e38531813781de0281c96d.zip
Imported Upstream version 1.71.0upstream/1.71.0
Diffstat (limited to 'boost/hana/detail')
-rw-r--r--boost/hana/detail/integral_constant.hpp4
-rw-r--r--boost/hana/detail/preprocessor.hpp5
-rw-r--r--boost/hana/detail/struct_macros.hpp35
-rw-r--r--boost/hana/detail/variadic/reverse_apply.hpp4
4 files changed, 46 insertions, 2 deletions
diff --git a/boost/hana/detail/integral_constant.hpp b/boost/hana/detail/integral_constant.hpp
index 6fa7735164..72a40dacae 100644
--- a/boost/hana/detail/integral_constant.hpp
+++ b/boost/hana/detail/integral_constant.hpp
@@ -231,7 +231,11 @@ BOOST_HANA_NAMESPACE_BEGIN
};
#else
template <typename T, T v>
+#ifdef BOOST_HANA_WORKAROUND_MSVC_EMPTYBASE
+ struct __declspec(empty_bases) integral_constant
+#else
struct integral_constant
+#endif
: std::integral_constant<T, v>
, detail::operators::adl<integral_constant<T, v>>
{
diff --git a/boost/hana/detail/preprocessor.hpp b/boost/hana/detail/preprocessor.hpp
index 6a141187e7..4487ad8daf 100644
--- a/boost/hana/detail/preprocessor.hpp
+++ b/boost/hana/detail/preprocessor.hpp
@@ -22,7 +22,12 @@ Distributed under the Boost Software License, Version 1.0.
//! @ingroup group-details
//! Expands to its first argument.
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_PP_FRONT(...) BOOST_HANA_PP_FRONT_IMPL_I(__VA_ARGS__)
+#define BOOST_HANA_PP_FRONT_IMPL_I(...) BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_FRONT_IMPL(__VA_ARGS__, ),)
+#else
#define BOOST_HANA_PP_FRONT(...) BOOST_HANA_PP_FRONT_IMPL(__VA_ARGS__, )
+#endif
#define BOOST_HANA_PP_FRONT_IMPL(e0, ...) e0
//! @ingroup group-details
diff --git a/boost/hana/detail/struct_macros.hpp b/boost/hana/detail/struct_macros.hpp
index e99ab4fac8..8298de67d6 100644
--- a/boost/hana/detail/struct_macros.hpp
+++ b/boost/hana/detail/struct_macros.hpp
@@ -67,8 +67,13 @@ BOOST_HANA_NAMESPACE_BEGIN namespace struct_detail {
//!
//! Specifically, `BOOST_HANA_PP_NARG(x1, ..., xn)` expands to `n`. It is
//! an error to call this macro with 0 arguments.
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_PP_NARG(...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,),)
+#else
#define BOOST_HANA_PP_NARG(...) \
BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,)
+#endif
#define BOOST_HANA_PP_NARG_IMPL(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40, N, ...) N
@@ -80,8 +85,14 @@ BOOST_HANA_NAMESPACE_BEGIN namespace struct_detail {
#define BOOST_HANA_PP_BACK(...) \
BOOST_HANA_PP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_PP_BACK_IMPL(N, ...) BOOST_HANA_PP_BACK_IMPL_I(N, __VA_ARGS__)
+#define BOOST_HANA_PP_BACK_IMPL_I(N, ...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_BACK_IMPL_, N)(__VA_ARGS__),)
+#else
#define BOOST_HANA_PP_BACK_IMPL(N, ...) \
BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_BACK_IMPL_, N)(__VA_ARGS__)
+#endif
#define BOOST_HANA_PP_BACK_IMPL_1(e1) e1
@@ -173,8 +184,14 @@ BOOST_HANA_NAMESPACE_BEGIN namespace struct_detail {
#define BOOST_HANA_PP_DROP_BACK(...) \
BOOST_HANA_PP_DROP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_PP_DROP_BACK_IMPL(N, ...) BOOST_HANA_PP_DROP_BACK_IMPL_I(N, __VA_ARGS__)
+#define BOOST_HANA_PP_DROP_BACK_IMPL_I(N, ...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_DROP_BACK_IMPL_, N)(__VA_ARGS__),)
+#else
#define BOOST_HANA_PP_DROP_BACK_IMPL(N, ...) \
BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_DROP_BACK_IMPL_, N)(__VA_ARGS__)
+#endif
#define BOOST_HANA_PP_DROP_BACK_IMPL_1(e1)
@@ -271,8 +288,14 @@ struct BOOST_HANA_ADAPT_STRUCT_must_be_called_in_the_global_namespace;
static_assert(true, "force the usage of a trailing semicolon") \
/**/
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_ADAPT_STRUCT_IMPL(N, ...) BOOST_HANA_ADAPT_STRUCT_IMPL_I(N, __VA_ARGS__)
+#define BOOST_HANA_ADAPT_STRUCT_IMPL_I(N, ...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_STRUCT_IMPL_, N)(__VA_ARGS__),)
+#else
#define BOOST_HANA_ADAPT_STRUCT_IMPL(N, ...) \
BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_STRUCT_IMPL_, N)(__VA_ARGS__)
+#endif
#define BOOST_HANA_ADAPT_STRUCT_IMPL_1(TYPE ) \
@@ -1109,8 +1132,14 @@ struct BOOST_HANA_ADAPT_ADT_must_be_called_in_the_global_namespace;
static_assert(true, "force the usage of a trailing semicolon") \
/**/
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_ADAPT_ADT_IMPL(N, ...) BOOST_HANA_ADAPT_ADT_IMPL_I(N, __VA_ARGS__)
+#define BOOST_HANA_ADAPT_ADT_IMPL_I(N, ...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_ADT_IMPL_, N)(__VA_ARGS__),)
+#else
#define BOOST_HANA_ADAPT_ADT_IMPL(N, ...) \
BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_ADT_IMPL_, N)(__VA_ARGS__)
+#endif
#define BOOST_HANA_ADAPT_ADT_IMPL_1(TYPE ) \
@@ -1981,8 +2010,14 @@ struct BOOST_HANA_ADAPT_ADT_must_be_called_in_the_global_namespace;
#define BOOST_HANA_DEFINE_STRUCT(...) \
BOOST_HANA_DEFINE_STRUCT_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
+#ifdef BOOST_HANA_WORKAROUND_MSVC_PREPROCESSOR_616033
+#define BOOST_HANA_DEFINE_STRUCT_IMPL(N, ...) BOOST_HANA_DEFINE_STRUCT_IMPL_I(N, __VA_ARGS__)
+#define BOOST_HANA_DEFINE_STRUCT_IMPL_I(N, ...) \
+ BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_CONCAT(BOOST_HANA_DEFINE_STRUCT_IMPL_, N)(__VA_ARGS__),)
+#else
#define BOOST_HANA_DEFINE_STRUCT_IMPL(N, ...) \
BOOST_HANA_PP_CONCAT(BOOST_HANA_DEFINE_STRUCT_IMPL_, N)(__VA_ARGS__)
+#endif
#define BOOST_HANA_DEFINE_STRUCT_IMPL_1(TYPE ) \
diff --git a/boost/hana/detail/variadic/reverse_apply.hpp b/boost/hana/detail/variadic/reverse_apply.hpp
index b276fa4177..a1f71ff53c 100644
--- a/boost/hana/detail/variadic/reverse_apply.hpp
+++ b/boost/hana/detail/variadic/reverse_apply.hpp
@@ -18,8 +18,8 @@ BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
BOOST_HANA_CONSTEXPR_LAMBDA auto reverse_apply =
[](auto&& f, auto&& ...x) -> decltype(auto) {
return detail::variadic::reverse_apply_unrolled(
- static_cast<decltype(f)&&>(f),
- static_cast<decltype(x)&&>(x)...
+ static_cast<decltype(f)>(f),
+ static_cast<decltype(x)>(x)...
);
};
}} BOOST_HANA_NAMESPACE_END