forked from boostorg/fusion
Adding typename in front of BOOST_TYPEOF is only needed in MSVC when we check the type of a template.
This commit is contained in:
@ -47,8 +47,9 @@
|
|||||||
#define BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ) \
|
#define BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ) \
|
||||||
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)
|
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)
|
||||||
|
|
||||||
#define BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF( \
|
#ifdef BOOST_MSVC
|
||||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
|
||||||
|
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
\
|
\
|
||||||
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
||||||
TEMPLATE_PARAMS_SEQ) \
|
TEMPLATE_PARAMS_SEQ) \
|
||||||
@ -56,10 +57,26 @@
|
|||||||
struct deduced_attr_type { \
|
struct deduced_attr_type { \
|
||||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||||
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||||
BOOST_TYPEOF( \
|
BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
|
||||||
PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
|
|
||||||
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
|
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
|
||||||
}; \
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
|
||||||
|
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
|
struct deduced_attr_type { \
|
||||||
|
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||||
|
typedef BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
|
||||||
|
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF( \
|
||||||
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
|
\
|
||||||
|
BOOST_FUSION_DEDUCED_ATTR_TYPE( \
|
||||||
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
\
|
\
|
||||||
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||||
boost::remove_const< \
|
boost::remove_const< \
|
||||||
|
@ -61,9 +61,31 @@
|
|||||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL, \
|
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL, \
|
||||||
BOOST_PP_TUPLE_EAT(1))(SEQ)
|
BOOST_PP_TUPLE_EAT(1))(SEQ)
|
||||||
|
|
||||||
|
#define BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ) \
|
||||||
|
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BOOST_MSVC
|
||||||
# define BOOST_FUSION_ATTRIBUTE_TYPEOF( \
|
# define BOOST_FUSION_ATTRIBUTE_TYPEOF( \
|
||||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, IS_TPL) \
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
|
\
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
||||||
|
TEMPLATE_PARAMS_SEQ) \
|
||||||
|
\
|
||||||
|
struct deduced_attr_type { \
|
||||||
|
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||||
|
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||||
|
BOOST_TYPEOF( PREFIX() obj.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||||
|
0, ATTRIBUTE)) \
|
||||||
|
type; \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||||
|
deduced_attr_type::type attribute_type;
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define BOOST_FUSION_ATTRIBUTE_TYPEOF( \
|
||||||
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||||
\
|
\
|
||||||
struct deduced_attr_type { \
|
struct deduced_attr_type { \
|
||||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||||
@ -72,9 +94,11 @@
|
|||||||
type; \
|
type; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
typedef BOOST_PP_IF(IS_TPL, typename, ) \
|
typedef BOOST_PP_IF(BOOST_FUSION_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||||
deduced_attr_type::type attribute_type;
|
deduced_attr_type::type attribute_type;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BOOST_FUSION_ATTRIBUTE_GIVENTYPE( \
|
#define BOOST_FUSION_ATTRIBUTE_GIVENTYPE( \
|
||||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, IS_TPL) \
|
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, IS_TPL) \
|
||||||
typedef \
|
typedef \
|
||||||
@ -152,7 +176,7 @@
|
|||||||
ATTRIBUTE, \
|
ATTRIBUTE, \
|
||||||
ATTRIBUTE_TUPEL_SIZE, \
|
ATTRIBUTE_TUPEL_SIZE, \
|
||||||
PREFIX, \
|
PREFIX, \
|
||||||
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)) \
|
TEMPLATE_PARAMS_SEQ) \
|
||||||
\
|
\
|
||||||
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
||||||
TEMPLATE_PARAMS_SEQ) \
|
TEMPLATE_PARAMS_SEQ) \
|
||||||
|
Reference in New Issue
Block a user