
template<int Value>
struct int_value //values stored in tuple
{
    int_value(void)
    : value(Value)
    {}
    int const value;
};
#define USE_LIB_SLIM
#ifdef USE_LIB_SLIM
#include <slim/container/vector.hpp>
#include <slim/sequence/intrinsic/at_c.hpp>
#include <slim/algorithm/iteration/accumulate.hpp>
namespace lib_container=slim;
#else
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/algorithm/iteration/accumulate.hpp>
namespace lib_container=boost::fusion;
#endif

#include "./tuple.benchmark.simple.hpp"

struct summer
{
  typedef int result_type;

  template<typename T>
  result_type operator()(result_type const& total, T const&summand)
  {
    return total+summand.value;
  }
};

int run(tuple_t const&a_tuple)
{
  summer fun;
  int total=0;
  return lib_container::accumulate(a_tuple,total,fun);
}

#include <iostream>

int main()
{
    tuple_t a_tuple;
    int result=run(a_tuple);
  #ifdef TUPLE_SIZE
    std::cout<<"TUPLE_SIZE="<<TUPLE_SIZE<<"\n";
  #endif
    std::cout<<"result="<<result<<"\n";
    return 0;
}
