#include <boost/fusion/container/list.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/sequence/io.hpp>
#include <boost/fusion/algorithm/transformation/join.hpp>
#include <boost/fusion/iterator/advance.hpp>
#include <boost/fusion/mpl.hpp>
#include <iostream>
#include <string>
int
main()
{
using namespace boost::fusion;
using namespace boost;
std::cout << tuple_open('[');
std::cout << tuple_close(']');
std::cout << tuple_delimiter(", ");
typedef list<double, std::string> I;
I i(123.456, "Hello");
typedef vector<double, std::string, int, short> R;
static int const r_size = result_of::size<R>::value;
static int const i_size = result_of::size<I>::value;
BOOST_STATIC_ASSERT(i_size <= r_size);
typedef result_of::begin<R>::type r_begin;
typedef result_of::end<R>::type r_end;
typedef result_of::advance_c<r_begin, i_size>::type r_advance;
typedef mpl::fusion_iterator<r_advance> mpl_r_advance;
typedef mpl::fusion_iterator<r_end> mpl_r_end;
typedef mpl::iterator_range<mpl_r_advance, mpl_r_end> tail;
R r(join(i, tail()));
std::cout << r << std::endl;
return 0;
}