adapt plain old array types (1)

[SVN r59576]
This commit is contained in:
Christopher Schmidt
2010-02-07 18:22:06 +00:00
parent b86d7dbe80
commit 5eb9c03cd2
25 changed files with 100 additions and 61 deletions

View File

@ -1,6 +1,7 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2005-2006 Dan Marsden
Copyright (c) 2010 Christopher Schmidt
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,15 +9,19 @@
#if !defined(BOOST_FUSION_ARRAY_27122005_1035) #if !defined(BOOST_FUSION_ARRAY_27122005_1035)
#define BOOST_FUSION_ARRAY_27122005_1035 #define BOOST_FUSION_ARRAY_27122005_1035
#include <boost/fusion/adapted/array/array_iterator.hpp> //For backwards compatibility
#include <boost/fusion/adapted/boost_array.hpp>
#include <boost/fusion/adapted/array/tag_of.hpp> #include <boost/fusion/adapted/array/tag_of.hpp>
#include <boost/fusion/adapted/array/detail/is_view_impl.hpp> #include <boost/fusion/adapted/array/is_view_impl.hpp>
#include <boost/fusion/adapted/array/detail/is_sequence_impl.hpp> #include <boost/fusion/adapted/array/is_sequence_impl.hpp>
#include <boost/fusion/adapted/array/detail/category_of_impl.hpp> #include <boost/fusion/adapted/array/category_of_impl.hpp>
#include <boost/fusion/adapted/array/detail/begin_impl.hpp> #include <boost/fusion/adapted/array/begin_impl.hpp>
#include <boost/fusion/adapted/array/detail/end_impl.hpp> #include <boost/fusion/adapted/array/end_impl.hpp>
#include <boost/fusion/adapted/array/detail/size_impl.hpp> #include <boost/fusion/adapted/array/size_impl.hpp>
#include <boost/fusion/adapted/array/detail/at_impl.hpp> #include <boost/fusion/adapted/array/at_impl.hpp>
#include <boost/fusion/adapted/array/detail/value_at_impl.hpp> #include <boost/fusion/adapted/array/value_at_impl.hpp>
#include <boost/fusion/adapted/array/deref_impl.hpp>
#include <boost/fusion/adapted/array/value_of_impl.hpp>
#endif #endif

View File

@ -0,0 +1,22 @@
/*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_BOOST_ARRAY_27122005_1035)
#define BOOST_FUSION_BOOST_ARRAY_27122005_1035
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
#include <boost/fusion/adapted/boost_array/tag_of.hpp>
#include <boost/fusion/adapted/boost_array/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/category_of_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/begin_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/end_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/size_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/at_impl.hpp>
#include <boost/fusion/adapted/boost_array/detail/value_at_impl.hpp>
#endif

View File

@ -0,0 +1,12 @@
/*=============================================================================
Copyright (c) 2010 Christopher Schmidt
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_INCLUDE_BOOST_ARRAY)
#define FUSION_INCLUDE_BOOST_ARRAY
#include <boost/fusion/adapted/boost_array.hpp>
#endif

View File

@ -21,7 +21,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -51,7 +51,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct advance_impl<array_iterator_tag>; struct advance_impl<boost_array_iterator_tag>;
template <> template <>
struct advance_impl<mpl_iterator_tag>; struct advance_impl<mpl_iterator_tag>;

View File

@ -95,11 +95,16 @@ namespace boost { namespace fusion
template <typename It1, typename It2> template <typename It1, typename It2>
struct distance struct distance
: mpl::minus< {
typename It2::index typedef mpl::minus<typename It2::index, typename It1::index> type;
, typename It1::index
> static
{}; type
call(It1 const&, It2 const&)
{
return type();
}
};
template <typename It1, typename It2> template <typename It1, typename It2>
struct equal_to struct equal_to

View File

@ -14,7 +14,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -35,7 +35,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct deref_impl<array_iterator_tag>; struct deref_impl<boost_array_iterator_tag>;
template <> template <>
struct deref_impl<mpl_iterator_tag>; struct deref_impl<mpl_iterator_tag>;

View File

@ -22,7 +22,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -48,7 +48,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct distance_impl<array_iterator_tag>; struct distance_impl<boost_array_iterator_tag>;
template <> template <>
struct distance_impl<mpl_iterator_tag>; struct distance_impl<mpl_iterator_tag>;
@ -61,8 +61,8 @@ namespace boost { namespace fusion
{ {
template <typename First, typename Last> template <typename First, typename Last>
struct distance struct distance
: extension::distance_impl<typename detail::tag_of<First>::type>:: : extension::distance_impl<typename detail::tag_of<First>::type>::
template apply<First, Last> template apply<First, Last>
{ {
typedef typename extension::distance_impl<typename detail::tag_of<First>::type>:: typedef typename extension::distance_impl<typename detail::tag_of<First>::type>::
template apply<First, Last>::type distance_application; template apply<First, Last>::type distance_application;

View File

@ -18,7 +18,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -42,7 +42,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct equal_to_impl<array_iterator_tag>; struct equal_to_impl<boost_array_iterator_tag>;
template <> template <>
struct equal_to_impl<mpl_iterator_tag>; struct equal_to_impl<mpl_iterator_tag>;

View File

@ -13,7 +13,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -34,7 +34,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct next_impl<array_iterator_tag>; struct next_impl<boost_array_iterator_tag>;
template <> template <>
struct next_impl<mpl_iterator_tag>; struct next_impl<mpl_iterator_tag>;

View File

@ -13,7 +13,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -34,7 +34,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct prior_impl<array_iterator_tag>; struct prior_impl<boost_array_iterator_tag>;
template <> template <>
struct prior_impl<mpl_iterator_tag>; struct prior_impl<mpl_iterator_tag>;

View File

@ -14,7 +14,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct iterator_facade_tag; // iterator facade tag struct iterator_facade_tag; // iterator facade tag
struct array_iterator_tag; // boost::array iterator tag struct boost_array_iterator_tag; // boost::array iterator tag
struct mpl_iterator_tag; // mpl sequence iterator tag struct mpl_iterator_tag; // mpl sequence iterator tag
struct std_pair_iterator_tag; // std::pair iterator tag struct std_pair_iterator_tag; // std::pair iterator tag
@ -35,7 +35,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct value_of_impl<array_iterator_tag>; struct value_of_impl<boost_array_iterator_tag>;
template <> template <>
struct value_of_impl<mpl_iterator_tag>; struct value_of_impl<mpl_iterator_tag>;

View File

@ -17,7 +17,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -41,7 +41,7 @@ namespace boost { namespace fusion
struct at_impl<boost_tuple_tag>; struct at_impl<boost_tuple_tag>;
template <> template <>
struct at_impl<array_tag>; struct at_impl<boost_array_tag>;
template <> template <>
struct at_impl<mpl_sequence_tag>; struct at_impl<mpl_sequence_tag>;

View File

@ -18,7 +18,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -52,7 +52,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct at_key_impl<array_tag>; struct at_key_impl<boost_array_tag>;
template <> template <>
struct at_key_impl<mpl_sequence_tag>; struct at_key_impl<mpl_sequence_tag>;

View File

@ -14,7 +14,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; // iterator facade tag struct sequence_facade_tag; // iterator facade tag
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -38,7 +38,7 @@ namespace boost { namespace fusion
struct begin_impl<boost_tuple_tag>; struct begin_impl<boost_tuple_tag>;
template <> template <>
struct begin_impl<array_tag>; struct begin_impl<boost_array_tag>;
template <> template <>
struct begin_impl<mpl_sequence_tag>; struct begin_impl<mpl_sequence_tag>;

View File

@ -14,7 +14,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -38,7 +38,7 @@ namespace boost { namespace fusion
struct end_impl<boost_tuple_tag>; struct end_impl<boost_tuple_tag>;
template <> template <>
struct end_impl<array_tag>; struct end_impl<boost_array_tag>;
template <> template <>
struct end_impl<mpl_sequence_tag>; struct end_impl<mpl_sequence_tag>;

View File

@ -19,7 +19,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -47,7 +47,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct has_key_impl<array_tag>; struct has_key_impl<boost_array_tag>;
template <> template <>
struct has_key_impl<mpl_sequence_tag>; struct has_key_impl<mpl_sequence_tag>;

View File

@ -15,7 +15,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -39,7 +39,7 @@ namespace boost { namespace fusion
struct size_impl<boost_tuple_tag>; struct size_impl<boost_tuple_tag>;
template <> template <>
struct size_impl<array_tag>; struct size_impl<boost_array_tag>;
template <> template <>
struct size_impl<mpl_sequence_tag>; struct size_impl<mpl_sequence_tag>;

View File

@ -15,7 +15,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -39,7 +39,7 @@ namespace boost { namespace fusion
struct value_at_impl<boost_tuple_tag>; struct value_at_impl<boost_tuple_tag>;
template <> template <>
struct value_at_impl<array_tag>; struct value_at_impl<boost_array_tag>;
template <> template <>
struct value_at_impl<mpl_sequence_tag>; struct value_at_impl<mpl_sequence_tag>;

View File

@ -17,7 +17,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -42,7 +42,7 @@ namespace boost { namespace fusion
}; };
template <> template <>
struct value_at_key_impl<array_tag>; struct value_at_key_impl<boost_array_tag>;
template <> template <>
struct value_at_key_impl<mpl_sequence_tag>; struct value_at_key_impl<mpl_sequence_tag>;

View File

@ -15,7 +15,7 @@ namespace boost { namespace fusion
{ {
// Special tags: // Special tags:
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -48,7 +48,7 @@ namespace boost { namespace fusion
struct category_of_impl<boost_tuple_tag>; struct category_of_impl<boost_tuple_tag>;
template <> template <>
struct category_of_impl<array_tag>; struct category_of_impl<boost_array_tag>;
template <> template <>
struct category_of_impl<mpl_sequence_tag>; struct category_of_impl<mpl_sequence_tag>;

2
include/boost/fusion/support/ext_/is_segmented.hpp Executable file → Normal file
View File

@ -14,7 +14,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
struct iterator_range_tag; struct iterator_range_tag;

View File

@ -19,7 +19,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct non_fusion_tag; struct non_fusion_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -43,7 +43,7 @@ namespace boost { namespace fusion
struct is_sequence_impl<boost_tuple_tag>; struct is_sequence_impl<boost_tuple_tag>;
template <> template <>
struct is_sequence_impl<array_tag>; struct is_sequence_impl<boost_array_tag>;
template <> template <>
struct is_sequence_impl<mpl_sequence_tag>; struct is_sequence_impl<mpl_sequence_tag>;

View File

@ -15,7 +15,7 @@ namespace boost { namespace fusion
// Special tags: // Special tags:
struct sequence_facade_tag; struct sequence_facade_tag;
struct boost_tuple_tag; // boost::tuples::tuple tag struct boost_tuple_tag; // boost::tuples::tuple tag
struct array_tag; // boost::array tag struct boost_array_tag; // boost::array tag
struct mpl_sequence_tag; // mpl sequence tag struct mpl_sequence_tag; // mpl sequence tag
struct std_pair_tag; // std::pair tag struct std_pair_tag; // std::pair tag
@ -41,7 +41,7 @@ namespace boost { namespace fusion
struct is_view_impl<boost_tuple_tag>; struct is_view_impl<boost_tuple_tag>;
template <> template <>
struct is_view_impl<array_tag>; struct is_view_impl<boost_array_tag>;
template <> template <>
struct is_view_impl<mpl_sequence_tag>; struct is_view_impl<mpl_sequence_tag>;

View File

@ -81,6 +81,7 @@ import testing ;
[ run sequence/set.cpp : : : : ] [ run sequence/set.cpp : : : : ]
[ run sequence/single_view.cpp : : : : ] [ run sequence/single_view.cpp : : : : ]
[ run sequence/std_pair.cpp : : : : ] [ run sequence/std_pair.cpp : : : : ]
[ run sequence/boost_array.cpp : : : : ]
[ run sequence/array.cpp : : : : ] [ run sequence/array.cpp : : : : ]
[ run sequence/tuple_comparison.cpp : : : : ] [ run sequence/tuple_comparison.cpp : : : : ]
[ run sequence/tuple_construction.cpp : : : : ] [ run sequence/tuple_construction.cpp : : : : ]

View File

@ -1,6 +1,7 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2005-2006 Dan Marsden
Copyright (c) 2010 Christopher Schmidt
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -8,19 +9,15 @@
#include <boost/detail/lightweight_test.hpp> #include <boost/detail/lightweight_test.hpp>
#include <boost/fusion/adapted/array.hpp> #include <boost/fusion/adapted/boost_array.hpp>
#include <boost/array.hpp> #include <boost/array.hpp>
#include <boost/fusion/sequence/intrinsic.hpp> #include <boost/fusion/sequence/intrinsic.hpp>
#include <boost/fusion/support/is_sequence.hpp> #include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/support/is_view.hpp> #include <boost/fusion/support/is_view.hpp>
#include <boost/fusion/iterator.hpp> #include <boost/fusion/iterator.hpp>
#include <boost/fusion/mpl.hpp>
#include <boost/mpl/is_sequence.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/assert.hpp> #include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>
int main() int main()
{ {
@ -41,8 +38,5 @@ int main()
BOOST_TEST(size(arr) == 3); BOOST_TEST(size(arr) == 3);
BOOST_TEST(distance(begin(arr), end(arr)) == 3); BOOST_TEST(distance(begin(arr), end(arr)) == 3);
BOOST_MPL_ASSERT((boost::mpl::is_sequence<array_type>));
BOOST_MPL_ASSERT((boost::is_same<int, boost::mpl::front<array_type>::type>));
return boost::report_errors(); return boost::report_errors();
} }