mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-29 12:07:36 +02:00
Remove trailing void_ support on variadic vector.
This commit is contained in:
@ -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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
Reference in New Issue
Block a user