Remove trailing void_ support on variadic vector.

This commit is contained in:
Kohei Takahashi
2016-02-11 23:56:07 +09:00
parent 0526f7c04f
commit b46aad996a
2 changed files with 15 additions and 52 deletions

View File

@ -30,33 +30,13 @@ namespace boost { namespace fusion
template <typename ...T> template <typename ...T>
struct make_vector struct make_vector
{ {
// make `make_vector<T..., void_...>' into `make_vector<T...>' typedef vector<
template <typename, typename...> struct trim_void; typename detail::as_fusion_element<
typename remove_const<
template <typename... U> typename remove_reference<T>::type
struct trim_void<vector<U...> > >::type
{ >::type...
typedef vector<U...> type; > type;
};
template <typename... U, typename... Tail>
struct trim_void<vector<U...>, void_, Tail...>
: trim_void<vector<U...> > { };
template <typename... U, typename Head, typename... Tail>
struct trim_void<vector<U...>, Head, Tail...>
: trim_void<vector<U..., Head>, Tail...> { };
typedef
typename trim_void<
vector<>
, typename detail::as_fusion_element<
typename remove_const<
typename remove_reference<T>::type
>::type
>::type...
>::type
type;
}; };
} }

View File

@ -276,37 +276,20 @@ namespace boost { namespace fusion
static BOOST_FUSION_GPU_ENABLED static BOOST_FUSION_GPU_ENABLED
mpl::identity<U> value_at_impl(store<N, U>*); mpl::identity<U> value_at_impl(store<N, U>*);
}; };
template <typename V, typename... T>
struct trim_void_;
template <typename... T>
struct trim_void_<vector<T...> >
{
typedef vector_data<
typename detail::make_index_sequence<sizeof...(T)>::type
, T...
> type;
};
template <typename... T, typename... Tail>
struct trim_void_<vector<T...>, void_, Tail...>
: trim_void_<vector<T...> > {};
template <typename... T, typename Head, typename... Tail>
struct trim_void_<vector<T...>, Head, Tail...>
: trim_void_<vector<T..., Head>, Tail...> {};
template <typename... T>
struct trim_void : trim_void_<vector<>, T...> {};
} // namespace boost::fusion::vector_detail } // namespace boost::fusion::vector_detail
// This class provides backward compatibility: vector<T, ..., void_, void_, ...>. // This class provides backward compatibility: vector<T, ..., void_, void_, ...>.
template <typename... T> template <typename... T>
struct vector struct vector
: vector_detail::trim_void<T...>::type : vector_detail::vector_data<
typename detail::make_index_sequence<sizeof...(T)>::type
, T...
>
{ {
typedef typename vector_detail::trim_void<T...>::type base; typedef vector_detail::vector_data<
typename detail::make_index_sequence<sizeof...(T)>::type
, T...
> base;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
vector() vector()