[Boost-bugs] [Boost C++ Libraries] #4730: Limited number of tagged arguments in the accumulator_set constructor ?

Subject: [Boost-bugs] [Boost C++ Libraries] #4730: Limited number of tagged arguments in the accumulator_set constructor ?
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2010-10-13 08:42:21


#4730: Limited number of tagged arguments in the accumulator_set constructor ?
------------------------------------------------------------+---------------
 Reporter: AdrienTodeschini <adrien.todeschini@…> | Owner: eric_niebler
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: accumulator
  Version: Boost 1.40.0 | Severity: Problem
 Keywords: |
------------------------------------------------------------+---------------
 It seems that we can't use more than 4 tagged arguments in the
 accumulator_set constructor.
 Here is an example code to demonstrate my remark :

 {{{#!c++
   using namespace std;
   using namespace boost::accumulators;

   typedef accumulator_set<int, features<tag::weighted_mean,
       tag::weighted_density,
       tag::weighted_p_square_cumulative_distribution,
       tag::weighted_extended_p_square>,
       double> AccType1;

   typedef accumulator_set<int, features<tag::weighted_mean,
       tag::weighted_density,
       tag::weighted_p_square_cumulative_distribution>,
       double> AccType2;

   typedef accumulator_set<int, features<tag::weighted_mean,
       tag::weighted_density,
       tag::weighted_extended_p_square>,
       double> AccType3;

   double probs[] = {0.01,0.05, 0.25, 0.33, 0.5, 0.67, 0.75, 0.95, 0.99};
   vector<double> q_probs(probs, probs + sizeof(probs) / sizeof(double));

   AccType1 acc1(tag::weighted_density::cache_size = 10,
       tag::weighted_density::num_bins = 10,
       tag::weighted_extended_p_square::probabilities = q_probs,
       tag::weighted_p_square_cumulative_distribution::num_cells = 10);
   // compiles (4 tagged arguments)

   AccType1 acc2(sample = 42, tag::weighted_density::cache_size = 10,
       tag::weighted_density::num_bins = 10,
       tag::weighted_extended_p_square::probabilities = q_probs,
       tag::weighted_p_square_cumulative_distribution::num_cells = 10);
   // Error : does not compile (5 tagged arguments)

   AccType2 acc3(sample = 42, tag::weighted_density::cache_size = 10,
       tag::weighted_density::num_bins = 10,
       tag::weighted_p_square_cumulative_distribution::num_cells = 10);
   // compiles (4 tagged arguments)

   AccType3 acc4(sample = 42, tag::weighted_density::cache_size = 10,
       tag::weighted_density::num_bins = 10,
       tag::weighted_extended_p_square::probabilities = q_probs);
   // compiles (4 tagged arguments)
 }}}

 Moreover, I tried
 {{{#!c++
 #define BOOST_PARAMETER_MAX_ARITY 10
 }}}
 but it does not solve the problem.

 The error message from GCC 4.4.3 compiler is :

 {{{
 In file included from /usr/include/boost/accumulators/accumulators.hpp:12,
                 from <my_path>/sandbox.hpp:13,
                 from ../BiipsTest.cpp:11:
 /usr/include/boost/accumulators/framework/accumulator_set.hpp: In
 constructor ‘boost::accumulators::accumulator_set<Sample, Features,
 Weight>::accumulator_set(const A0&, const A1&, const A2&, const A3&,
 const A4&) [with A0 =
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::sample,
 const int>, A1 =
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::density_cache_size_<0>,
 const int>, A2 =
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::density_num_bins_<0>,
 const int>, A3 =
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::extended_p_square_probabilities_<0>,
 std::vector<double, std::allocator<double> > >, A4 =
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::p_square_cumulative_distribution_num_cells_<0>,
 const int>, Sample = int, Features =
 boost::accumulators::features<boost::accumulators::tag::weighted_mean,
 boost::accumulators::tag::weighted_density,
 boost::accumulators::tag::weighted_p_square_cumulative_distribution,
 boost::accumulators::tag::weighted_extended_p_square, 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 = double]’:
 <my_path>/sandbox.hpp:90: instantiated from here
 /usr/include/boost/accumulators/framework/accumulator_set.hpp:200:
 error: no match for call to
 â€˜(boost::accumulators::detail::accumulator_params)
 (boost::accumulators::accumulator_set<int,
 boost::accumulators::features<boost::accumulators::tag::weighted_mean,
 boost::accumulators::tag::weighted_density,
 boost::accumulators::tag::weighted_p_square_cumulative_distribution,
 boost::accumulators::tag::weighted_extended_p_square, 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>, double>&, const
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::sample,
 const int>&, const
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::density_cache_size_<0>,
 const int>&, const
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::density_num_bins_<0>,
 const int>&, const
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::extended_p_square_probabilities_<0>,
 std::vector<double, std::allocator<double> > >&, const
 boost::parameter::aux::tagged_argument<boost::accumulators::tag::p_square_cumulative_distribution_num_cells_<0>,
 const int>&)’
 /usr/include/boost/parameter/parameters.hpp:841: note: candidates are:
 boost::parameter::aux::empty_arg_list
 boost::parameter::parameters<PS0, PS1, PS2, PS3, PS4>::operator()()
 const [with PS0 =
 boost::parameter::required<boost::accumulators::tag::accumulator,
 boost::parameter::aux::use_default>, PS1 =
 boost::parameter::optional<boost::accumulators::tag::sample,
 boost::parameter::aux::use_default>, PS2 = boost::parameter::void_,
 PS3 = boost::parameter::void_, PS4 = boost::parameter::void_]
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/4730>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:04 UTC