mirror of
https://github.com/boostorg/typeof.git
synced 2025-05-09 23:14:01 +00:00
typeof support for template template arguments for Borland 5.9.2 (also used for Borland 5.8.2) (reverted to old scheme for other compilers)
[SVN r39704]
This commit is contained in:
parent
cbdff442ad
commit
86d4e1c4db
@ -93,10 +93,17 @@ namespace boost { namespace type_of {
|
||||
|
||||
#define BOOST_TYPEOF_TYPEDEF_INT_PN(z,n,Params) typedef int BOOST_PP_CAT(P,n);
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#define BOOST_TYPEOF_DECODE_NESTED_TEMPLATE_HELPER_NAME BOOST_PP_CAT(\
|
||||
BOOST_PP_CAT(\
|
||||
BOOST_PP_CAT(\
|
||||
decode_nested_template_helper,\
|
||||
BOOST_TYPEOF_REGISTRATION_GROUP\
|
||||
),0x10000\
|
||||
),__LINE__\
|
||||
)
|
||||
#define BOOST_TYPEOF_REGISTER_DECODE_NESTED_TEMPLATE_HELPER_IMPL(Name,Params,ID)\
|
||||
template<>\
|
||||
struct decode_nested_template_helper_impl<boost::mpl::size_t<ID> >\
|
||||
{\
|
||||
struct BOOST_TYPEOF_DECODE_NESTED_TEMPLATE_HELPER_NAME {\
|
||||
template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECLARE_DECODER_TYPE_PARAM_PAIR) >\
|
||||
struct decode_params;\
|
||||
template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECODER_TYPE_PARAM_PAIR) >\
|
||||
@ -105,12 +112,24 @@ namespace boost { namespace type_of {
|
||||
typedef Name<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),T)> type;\
|
||||
};\
|
||||
};
|
||||
//Template template param decoding
|
||||
#define BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TEMPLATE_TYPE(Name,Params)\
|
||||
typedef typename BOOST_TYPEOF_DECODE_NESTED_TEMPLATE_HELPER_NAME::decode_params<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),P)>::type type;
|
||||
|
||||
#else
|
||||
#define BOOST_TYPEOF_REGISTER_DECODE_NESTED_TEMPLATE_HELPER_IMPL(Name,Params,ID)
|
||||
|
||||
//Template template param decoding
|
||||
#define BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TEMPLATE_TYPE(Name,Params)\
|
||||
typedef typename decode_nested_template_helper_impl<self_id>::template decode_params<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),P)>::type type;
|
||||
|
||||
template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECLARE_DECODER_TYPE_PARAM_PAIR) >\
|
||||
struct decode_params;\
|
||||
template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECODER_TYPE_PARAM_PAIR) >\
|
||||
struct decode_params<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_PLACEHOLDER_TYPES) >\
|
||||
{\
|
||||
typedef Name<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),T)> type;\
|
||||
};\
|
||||
typedef typename decode_params<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),P)>::type type;
|
||||
#endif
|
||||
#define BOOST_TYPEOF_REGISTER_DECLARE_DECODER_TYPE_PARAM_PAIR(z,n,elem) \
|
||||
BOOST_TYPEOF_VIRTUAL(DECLARATION_TYPE, elem)(elem) BOOST_PP_CAT(T, n)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user