Workarounds for Fusion on IBM xlc

[SVN r40766]
This commit is contained in:
Joel de Guzman
2007-11-05 02:10:42 +00:00
parent b9ab685b44
commit 1c5bc499a7
16 changed files with 99 additions and 0 deletions

View File

@ -25,7 +25,11 @@ namespace boost { namespace fusion
namespace traits namespace traits
{ {
template<typename T, std::size_t N> template<typename T, std::size_t N>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct tag_of<boost::array<T,N>, void >
#else
struct tag_of<boost::array<T,N> > struct tag_of<boost::array<T,N> >
#endif
{ {
typedef array_tag type; typedef array_tag type;
}; };

View File

@ -33,13 +33,21 @@ namespace boost { namespace fusion
class T0, class T1, class T2, class T3, class T4, class T0, class T1, class T2, class T3, class T4,
class T5, class T6, class T7, class T8, class T9 class T5, class T6, class T7, class T8, class T9
> >
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, void >
#else
struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> > struct tag_of<tuples::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
#endif
{ {
typedef boost_tuple_tag type; typedef boost_tuple_tag type;
}; };
template <class Head, class Tail> template <class Head, class Tail>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct tag_of<tuples::cons<Head, Tail>, void >
#else
struct tag_of<tuples::cons<Head, Tail> > struct tag_of<tuples::cons<Head, Tail> >
#endif
{ {
typedef boost_tuple_tag type; typedef boost_tuple_tag type;
}; };

View File

@ -20,7 +20,11 @@ namespace boost { namespace fusion
namespace traits namespace traits
{ {
template <typename T1, typename T2> template <typename T1, typename T2>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct tag_of<std::pair<T1, T2>, void >
#else
struct tag_of<std::pair<T1, T2> > struct tag_of<std::pair<T1, T2> >
#endif
{ {
typedef struct_tag type; typedef struct_tag type;
}; };

View File

@ -18,7 +18,11 @@ namespace boost { namespace fusion
namespace traits namespace traits
{ {
template<BOOST_VARIANT_ENUM_PARAMS(typename T)> template<BOOST_VARIANT_ENUM_PARAMS(typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct tag_of<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, void >
#else
struct tag_of<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> > struct tag_of<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
#endif
{ {
typedef variant_tag type; typedef variant_tag type;
}; };

View File

@ -22,7 +22,11 @@ namespace boost { namespace fusion
}; };
template <typename Sequence, typename F> template <typename Sequence, typename F>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct transform<Sequence, F, void_>
#else
struct transform<Sequence, F> struct transform<Sequence, F>
#endif
{ {
typedef transform_view<Sequence, F> type; typedef transform_view<Sequence, F> type;
}; };

View File

@ -17,6 +17,7 @@
#include <boost/preprocessor/repetition/enum.hpp> #include <boost/preprocessor/repetition/enum.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/preprocessor/arithmetic/inc.hpp> #include <boost/preprocessor/arithmetic/inc.hpp>
#include <boost/preprocessor/iteration/iterate.hpp> #include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/mpl/vector.hpp> #include <boost/mpl/vector.hpp>
@ -53,7 +54,13 @@ namespace boost { namespace fusion {
namespace result_of namespace result_of
{ {
template< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T) > template< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T) >
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(ZIP_ITERATION), FUSION_MAX_ZIP_SEQUENCES, TEXT, void_) >
#undef TEXT
#else
struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) >
#endif
{ {
typedef mpl::vector< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > sequences; typedef mpl::vector< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > sequences;
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params; typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;

View File

@ -14,6 +14,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp> #include <boost/fusion/container/deque/deque.hpp>
namespace boost { namespace fusion namespace boost { namespace fusion
@ -53,7 +54,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct deque_tie<BOOST_PP_ENUM_PARAMS(N, T)> struct deque_tie<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type; typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
}; };

View File

@ -13,6 +13,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/list/list.hpp> #include <boost/fusion/container/list/list.hpp>
namespace boost { namespace fusion namespace boost { namespace fusion
@ -53,7 +54,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct list_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
#undef TEXT
#else
struct list_tie<BOOST_PP_ENUM_PARAMS(N, T)> struct list_tie<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type; typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
}; };

View File

@ -19,6 +19,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp> #include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp> #include <boost/fusion/support/detail/as_fusion_element.hpp>
@ -72,7 +73,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_deque<BOOST_PP_ENUM_PARAMS(N, T)> struct make_deque<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type; typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
}; };

View File

@ -12,6 +12,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/list/list.hpp> #include <boost/fusion/container/list/list.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp> #include <boost/fusion/support/detail/as_fusion_element.hpp>
@ -65,7 +66,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct make_list< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_list<BOOST_PP_ENUM_PARAMS(N, T)> struct make_list<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type; typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
}; };

View File

@ -12,6 +12,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp> #include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp> #include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/pair.hpp> #include <boost/fusion/support/pair.hpp>
@ -77,7 +78,13 @@ namespace boost { namespace fusion
BOOST_PP_ENUM_PARAMS(N, typename K) BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D) , BOOST_PP_ENUM_PARAMS(N, typename D)
> >
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
#undef TEXT
#else
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)> struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{ {
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type; typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
}; };

View File

@ -12,6 +12,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/set/set.hpp> #include <boost/fusion/container/set/set.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp> #include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/pair.hpp> #include <boost/fusion/support/pair.hpp>
@ -67,7 +68,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct make_set< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_SET_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_set<BOOST_PP_ENUM_PARAMS(N, T)> struct make_set<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type; typedef set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
}; };

View File

@ -12,6 +12,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/vector/vector.hpp> #include <boost/fusion/container/vector/vector.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp> #include <boost/fusion/support/detail/as_fusion_element.hpp>
@ -65,7 +66,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)> struct make_vector<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type; typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
}; };

View File

@ -13,6 +13,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp> #include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/container/map/limits.hpp> #include <boost/fusion/container/map/limits.hpp>
#include <boost/fusion/support/pair.hpp> #include <boost/fusion/support/pair.hpp>
@ -80,7 +81,14 @@ namespace boost { namespace fusion
BOOST_PP_ENUM_PARAMS(N, typename K) BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D) , BOOST_PP_ENUM_PARAMS(N, typename D)
> >
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
#undef TEXT
#else
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)> struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{ {
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type; typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
}; };

View File

@ -13,6 +13,7 @@
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/vector/vector.hpp> #include <boost/fusion/container/vector/vector.hpp>
namespace boost { namespace fusion namespace boost { namespace fusion
@ -52,7 +53,13 @@ namespace boost { namespace fusion
namespace result_of namespace result_of
{ {
template <BOOST_PP_ENUM_PARAMS(N, typename T)> template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
#define TEXT(z, n, text) , text
struct vector_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
#undef TEXT
#else
struct vector_tie<BOOST_PP_ENUM_PARAMS(N, T)> struct vector_tie<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{ {
typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type; typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
}; };

View File

@ -73,7 +73,11 @@ namespace boost { namespace fusion
// Unary Version // Unary Version
template <typename Sequence, typename F> template <typename Sequence, typename F>
#if defined(BOOST_PARTIAL_SPECIALIZATION_EXPLICT_ARGS)
struct transform_view<Sequence, F, void_> : sequence_base<transform_view<Sequence, F, void_> >
#else
struct transform_view<Sequence, F> : sequence_base<transform_view<Sequence, F> > struct transform_view<Sequence, F> : sequence_base<transform_view<Sequence, F> >
#endif
{ {
typedef transform_view_tag fusion_tag; typedef transform_view_tag fusion_tag;
typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef fusion_sequence_tag tag; // this gets picked up by MPL