I'm using VC++ Express with Boost 1.34.0. Everytime I defined BOOST_PARAMETER_FUNCTION with >5 parameters I got this error:
d:\project\basic\param\param.cpp(30) : error C2977: 'boost::parameter::parameters' : too many template arguments
d:\library\boost\parameter\parameters.hpp(924) : see declaration of 'boost::parameter::parameters'
d:\project\basic\param\param.cpp(30) : see reference to class template instantiation 'boost_param_params_30Func<BoostParameterDummy>' being compiled
d:\project\basic\param\param.cpp(30) : error C2955: 'boost::parameter::parameters' : use of class template requires template argument list
d:\library\boost\parameter\parameters.hpp(924) : see declaration of 'boost::parameter::parameters'
d:\project\basic\param\param.cpp(30) : error C2977: 'boost::parameter::aux::argument_pack' : too many template arguments
d:\library\boost\parameter\preprocessor.hpp(153) : see declaration of 'boost::parameter::aux::argument_pack'
d:\project\basic\param\param.cpp(30) : error C2977: 'boost::parameter::aux::match' : too many template arguments
d:\library\boost\parameter\preprocessor.hpp(97) : see declaration
of 'boost::parameter::aux::match'
d:\project\basic\param\param.cpp(30) : error C2039: 'type' : is not a member of 'boost::parameter::aux::match'
d:\library\boost\parameter\preprocessor.hpp(97) : see declaration of 'boost::parameter::aux::match'
d:\project\basic\param\param.cpp(30) : error C2146: syntax error : missing ',' before identifier 'boost_parameter_enabler_argument'
d:\project\basic\param\param.cpp(30) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:\project\basic\param\param.cpp(30) : error C2059: syntax error :
')'
d:\project\basic\param\param.cpp(30) : error C2143: syntax error : missing ')' before '<end Parse>'
My test code is this:
int func(int , int , int , int , int , int )
{
return 0;
}
BOOST_PARAMETER_NAME(arg1)
BOOST_PARAMETER_NAME(arg2)
BOOST_PARAMETER_NAME(arg3)
BOOST_PARAMETER_NAME(arg4)
BOOST_PARAMETER_NAME(arg5)
BOOST_PARAMETER_NAME(arg6)
BOOST_PARAMETER_NAME(arg7)
BOOST_PARAMETER_NAME(arg8)
BOOST_PARAMETER_FUNCTION(
(int),
Func,
tag,
(required(arg1,(int))
(arg2,(int))
(arg3,(int))
(arg4,(int))
(arg5,(int)) )
(optional(arg6,(int),0) )
)
{
return func(arg1, arg2, arg3, arg4, arg5, arg6);
}
If I reduce the number of arguments in BOOST_PARAMETER_FUNCTION like this:
BOOST_PARAMETER_FUNCTION(
(int),
Func,
tag,
(required(arg1,(int))
(arg2,(int))
(arg3,(int))
(arg4,(int)) )
(optional(arg6,(int),0) )
)
{
return func(arg1, arg2, arg3, arg4, 0, arg6);
}
then it's compiled just fine. Any idea how to fix this ?