Boost logo

Boost :

Subject: Re: [boost] [1.50.0] Beta 1 release candidates available for testing
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2012-06-03 20:57:23


On Thu, May 31, 2012 at 7:45 PM, Beman Dawes <bdawes_at_[hidden]> wrote:
> Release candidate files for 1.50.0 beta 1 are available at
> http://boost.cowic.de/rc/
>
> As always, the release managers would appreciate it if you download
> the candidate of your choice and give building it a try. Please report
> both success and failure, and anything else that is noteworthy.
>
> This helps ensure the candidates build OK before we push them out to
> SourceForge.

I've been using the RC in my projects and I notice an issue with
Boost.Parameter.

It looks like that the RC Boost.Parameter is not able to refer to the
parameter types within the function declaration.

For example, this uses `tag::x::_` to refer to x's type:

#include <boost/parameter.hpp>
#include <iostream>

BOOST_PARAMETER_NAME(x)
BOOST_PARAMETER_NAME(y)

BOOST_PARAMETER_FUNCTION(
    (void),
    f,
    tag,
    (required (x, *) (y, (tag::x::_)) )
) {
    std::cout << x << " " << y << std::endl;
}

int main ( void )
{
    f(1, 2);
    return 0;
}

This example compiles using Boost.Parameter from the trunk (both MSVC
8 and GCC 4.5.3) but on GCC 4.5.3
 using Boost.Parameter from RC 1.50.0 Beta1 gives the errors below.

It looks like there were only an hand full of changes of
Boost.Parameter that were not merged from trunk to release (see
attached .diff). Can these be merged? Referring to the parameter type
within the function declaration is a key feature of Boost.Parameter...
IMO, it's bad if that feature is broken in 1.50.0.

In file included from
../../../boost/1_50_0_beta1.cygwin/boost/parameter.hpp:14:0,
                 from 04.cpp:2:
../../../boost/1_50_0_beta1.cygwin/boost/parameter/value_type.hpp: In
instantiation of ‘boost::parameter::value_type<mpl_::arg<2>, tag::x,
boost::parameter::void_>’:
04.cpp:13:1: instantiated from ‘typename
boost_param_result_13f<Args>::type boost_param_implf(const Args&)
[with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<tag::y,
const int>, boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<tag::x,
const int>, boost::parameter::aux::empty_arg_list> >, typename
boost_param_result_13f<Args>::type = void]’
04.cpp:13:1: instantiated from ‘typename
boost_param_result_13f<typename
boost::parameter::aux::argument_pack<boost_param_params_13f<int>,
const ParameterArgumentType0, const
ParameterArgumentType1>::type>::type f(const ParameterArgumentType0&,
const ParameterArgumentType1&, typename
boost::parameter::aux::match<boost_param_params_13f<int>,
ParameterArgumentType0, ParameterArgumentType1>::type) [with
ParameterArgumentType0 = int, ParameterArgumentType1 = int, typename
boost_param_result_13f<typename
boost::parameter::aux::argument_pack<boost_param_params_13f<int>,
const ParameterArgumentType0, const
ParameterArgumentType1>::type>::type = void, typename
boost::parameter::aux::match<boost_param_params_13f<int>,
ParameterArgumentType0, ParameterArgumentType1>::type =
boost::parameter::parameters<boost::parameter::required<tag::x,
boost::mpl::always<mpl_::bool_<true> > >,
boost::parameter::required<tag::y,
boost::is_convertible<mpl_::arg<-0x000000001>,
boost::parameter::value_type<mpl_::arg<2>, tag::x,
boost::parameter::void_> > > >]’
04.cpp:19:11: instantiated from here
../../../boost/1_50_0_beta1.cygwin/boost/parameter/value_type.hpp:60:13:
error: no type named ‘binding’ in ‘struct mpl_::arg<2>’
../../../boost/1_50_0_beta1.cygwin/boost/parameter/value_type.hpp:62:5:
error: no type named ‘binding’ in ‘struct mpl_::arg<2>’
04.cpp: In function ‘typename boost_param_result_13f<Args>::type
boost_param_implf(const Args&) [with Args =
boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<tag::y,
const int>, boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<tag::x,
const int>, boost::parameter::aux::empty_arg_list> >, typename
boost_param_result_13f<Args>::type = void]’:
04.cpp:13:1: instantiated from ‘typename
boost_param_result_13f<typename
boost::parameter::aux::argument_pack<boost_param_params_13f<int>,
const ParameterArgumentType0, const
ParameterArgumentType1>::type>::type f(const ParameterArgumentType0&,
const ParameterArgumentType1&, typename
boost::parameter::aux::match<boost_param_params_13f<int>,
ParameterArgumentType0, ParameterArgumentType1>::type) [with
ParameterArgumentType0 = int, ParameterArgumentType1 = int, typename
boost_param_result_13f<typename
boost::parameter::aux::argument_pack<boost_param_params_13f<int>,
const ParameterArgumentType0, const
ParameterArgumentType1>::type>::type = void, typename
boost::parameter::aux::match<boost_param_params_13f<int>,
ParameterArgumentType0, ParameterArgumentType1>::type =
boost::parameter::parameters<boost::parameter::required<tag::x,
boost::mpl::always<mpl_::bool_<true> > >,
boost::parameter::required<tag::y,
boost::is_convertible<mpl_::arg<-0x000000001>,
boost::parameter::value_type<mpl_::arg<2>, tag::x,
boost::parameter::void_> > > >]’
04.cpp:19:11: instantiated from here
04.cpp:13:1: error: no matching function for call to
‘boost::parameter::aux::cast<void(boost::parameter::value_type<mpl_::arg<2>,
tag::x, boost::parameter::void_>)>::execute(const int&)’
../../../boost/1_50_0_beta1.cygwin/boost/parameter/aux_/cast.hpp:99:28:
note: candidates are: static boost::parameter::aux::use_default_tag
boost::parameter::aux::cast<void(T)>::execute(boost::parameter::aux::use_default_tag)
[with T = boost::parameter::value_type<mpl_::arg<2>, tag::x,
boost::parameter::void_>]
../../../boost/1_50_0_beta1.cygwin/boost/parameter/aux_/cast.hpp:109:14:
note: static T
boost::parameter::aux::cast<void(T)>::execute(T) [with T =
boost::parameter::value_type<mpl_::arg<2>, tag::x,
boost::parameter::void_>]
04.cpp:13:1: error: return-statement with a value, in function returning 'void'

Thanks.
--Lorenzo




Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk