#include "BoostWorkaround/boost/tuple/tuple.hpp"

struct another
{int dummy;};

boost::tuple<unsigned,unsigned,unsigned> first;
boost::tuple<int,float,double,bool,another> second;
boost::tuple<> third;
boost::tuple<float,float,float> last;

void test () {

	// Implicit conversion
	first = boost::make_tuple(4,4,4);

	// FIXME: Explicit conversion not really required yet
	last  = (boost::tuple<float,float,float>)boost::make_tuple(4.,4.,4.);	

	// Non-const access
	first.get<0>() = 1;
	first.get<1>() = 2;
	first.get<2>() = 3;

	float f = last.get<2>();
	bool  b = second.get<3>();

	// Const cases
	const boost::tuple<unsigned,unsigned,unsigned> constant = boost::make_tuple(4,4,4);
	first.get<0>() = constant.get<0>();

	// Direct assignment w. explicit conversion
	last = first;
}