#include <iostream>

#include <boost/fusion/container.hpp>
#include <boost/fusion/sequence.hpp>
#include <boost/smart_ptr/shared_ptr.hpp>

namespace fusion = boost::fusion;

struct Object1{};

int main()
{
	typedef fusion::vector<boost::shared_ptr<Object1> > seq_type;

	seq_type seq;
	boost::shared_ptr<Object1> value(new Object1());
	fusion::at_c<0>(seq) = value;

	std::cout << &*fusion::at_c<0>(seq) << std::endl;
	
	BOOST_MPL_ASSERT((boost::is_reference<fusion::result_of::at_c<seq_type, 0>::type>));
}

