Remove intermediate specialization.

This commit is contained in:
Kohei Takahashi
2015-06-28 19:42:08 +09:00
parent 1f8ccd7bc3
commit f9fda7ce06

View File

@ -276,21 +276,6 @@ namespace boost { namespace fusion
// template <typename T>
// struct SomeClass<vector<numbered_vector_tag<1>, T>>
// { ... };
template <std::size_t ...I, std::size_t N, typename ...T>
struct vector_data<detail::index_sequence<I...>, numbered_vector_tag<N>, T...>
: vector_data<typename detail::make_index_sequence<sizeof...(T)>::type, T...>
{
typedef vector_data<typename detail::make_index_sequence<sizeof...(T)>::type, T...> base;
BOOST_STATIC_ASSERT((base::size::value == N));
template <typename ...U>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
vector_data(U&&... var)
: base(std::forward<U>(var)...)
{}
};
template <typename V, typename... T>
struct construct_vector_;
@ -303,6 +288,17 @@ namespace boost { namespace fusion
> type;
};
template <std::size_t N, typename... T>
struct construct_vector_<vector<numbered_vector_tag<N>, T...> >
{
typedef vector_data<
typename detail::make_index_sequence<sizeof...(T)>::type
, T...
> type;
BOOST_STATIC_ASSERT((type::size::value == N));
};
template <typename... U, typename... Tail>
struct construct_vector_<vector<U...>, void_, Tail...>
: construct_vector_<vector<U...> > {};