Hi,
Some features of accumulator, such as variance needs to compute powers
of quantities. What happens if the power of quantity is not the same
as the type of the original quantity?
An example is a boost::units::quantity,
accumulator_set< quantitysi::energy, stats
acc; //not compiling because of moment<2>
acc(1.2*si::joules);
...
Boost Accumulators manual describes how to do something similar for
average calculation (which I succeded in defining), by doing some
template tag dispatching in boost::numeric::functional,
http://www.boost.org/doc/libs/1_40_0/doc/html/accumulators/user_s_guide.html...
In this case I need the analogous for pow (power function), I tried
overloading pow(T, mpl::int_<N>) but I had no luck
namespace boost { namespace numeric{
using namespace boost::units;
quantityatomic::energy const& pow(quantityatomic::energy const
&x, mpl::int_<1>){
return x;
}
quantity
>::type> pow(quantityatomic::energy const& x, mpl::int_<2>){
return x*x;
}
}}
The error looks something like this (below, sorry it is very long).
Thank you, Alfredo
/g/g91/correaa/usr/include/boost/accumulators/statistics/moment.hpp:
In function 'T boost::numeric::pow(const T&, mpl_::int_<Level>) [with
T =
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>, int N =
2]':
/g/g91/correaa/usr/include/boost/accumulators/statistics/moment.hpp:
69: instantiated from 'void
boost::accumulators::impl::moment_impl::operator()(const
Args&) [with Args =
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> >, N =
mpl_::int_<2>, Sample =
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>]'
/g/g91/correaa/usr/include/boost/accumulators/framework/
accumulator_set.hpp:53: instantiated from 'void
boost::accumulators::detail::accumulator_visitor<Args>::operator()
(Accumulator&) const [with Accumulator =
boost::accumulators::detail::accumulator_wrapper,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, Args =
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> >]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/detail/
for_each.hpp:31: instantiated from 'void
boost::fusion::detail::for_each_linear(const First&, const Last&,
const F&, mpl_::false_) [with First =
boost::fusion::cons_iterator,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> >, Last =
boost::fusion::cons_iteratorboost::fusion::nil, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/detail/
for_each.hpp:32: instantiated from 'void
boost::fusion::detail::for_each_linear(const First&, const Last&,
const F&, mpl_::false_) [with First =
boost::fusion::cons_iterator >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sum>, boost::accumulators::tag::mean>,
boost::fusion::cons,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> > >, Last =
boost::fusion::cons_iteratorboost::fusion::nil, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/detail/
for_each.hpp:32: instantiated from 'void
boost::fusion::detail::for_each_linear(const First&, const Last&,
const F&, mpl_::false_) [with First =
boost::fusion::cons_iterator >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sample>, boost::accumulators::tag::sum>,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sum>, boost::accumulators::tag::mean>,
boost::fusion::cons,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> > > >, Last
= boost::fusion::cons_iteratorboost::fusion::nil, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/detail/
for_each.hpp:32: instantiated from 'void
boost::fusion::detail::for_each_linear(const First&, const Last&,
const F&, mpl_::false_) [with First =
boost::fusion::cons_iterator,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sample>, boost::accumulators::tag::sum>,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sum>, boost::accumulators::tag::mean>,
boost::fusion::cons,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> > > > >,
Last = boost::fusion::cons_iteratorboost::fusion::nil, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/detail/
for_each.hpp:41: instantiated from 'void
boost::fusion::detail::for_each(Sequence&, const F&, Tag) [with
Sequence =
boost::fusion::cons,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sample>, boost::accumulators::tag::sum>,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sum>, boost::accumulators::tag::mean>,
boost::fusion::cons,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> > > >, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >, Tag =
boost::fusion::forward_traversal_tag]'
/g/g91/correaa/usr/include/boost/fusion/algorithm/iteration/
for_each.hpp:32: instantiated from 'void
boost::fusion::for_each(Sequence&, const F&) [with Sequence =
boost::fusion::cons,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sample>, boost::accumulators::tag::sum>,
boost::fusion::cons >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::tag::sum>, boost::accumulators::tag::mean>,
boost::fusion::cons,
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::accumulators::tag::moment<2> >, boost::fusion::nil> > > >, F =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >]'
/g/g91/correaa/usr/include/boost/accumulators/framework/
accumulator_set.hpp:217: instantiated from 'void
boost::accumulators::accumulator_set::visit(const UnaryFunction&) [with UnaryFunction =
boost::accumulators::detail::accumulator_visitor >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double> >,
boost::parameter::aux::arg_list >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>,
boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, void> >, boost::parameter::aux::empty_arg_list> > >, Sample
=
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>, Features
= boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, Weight = void]'
/g/g91/correaa/usr/include/boost/accumulators/framework/
accumulator_set.hpp:250: instantiated from 'void
boost::accumulators::accumulator_set::operator()(const A1&) [with A1 =
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>, Sample =
boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>, Features
= boost::accumulators::stats, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>, Weight = void]'
.atomic.hpp.cpp:593: instantiated from here
/g/g91/correaa/usr/include/boost/accumulators/statistics/moment.hpp:
40: error: conversion from
'boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>' to non-
scalar type
'boost::units::quantity >,
boost::units::list >,
boost::units::list >,
boost::units::dimensionless_type> > >,
boost::units::homogeneous_system > > > > >, void>, double>' requested
compilation terminated due to -Wfatal-errors.