Boost.Lambda, boost::lambda::detail::return_type_deduction_failure?
Hello, I've been trying to use Boost.Lambda in one of my simple applications, but I can't seem to get the following code to compile: for_each(vect.begin(), vect.end(), (var(str) += _1+constant(string(", ")) )); Where vect is a std::vector<std::string> and str is a std::string. I have included these headers: <boost/lambda/lambda.hpp>, <vector>, <string>, <algorithm>. Here is the complete error I'm getting (using MSVC2005): c:\program files\boost\boost_1_36_0\boost\lambda\detail\operator_lambda_func_base.hpp(225) : error C2679: binary '+=' : no operator found which takes a right-hand operand of type 'boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>>' (or there is no acceptable conversion) with [ <unnamed-symbol>=boost::lambda::detail::return_type_2_arithmetic_phase_3<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>> ] f:\microsoft visual studio 8\vc\include\xstring(890): could be 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator +=(const std::basic_string<_Elem,_Traits,_Ax> &)' with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char> ] f:\microsoft visual studio 8\vc\include\xstring(895): or 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator +=(const _Elem *)' with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char> ] f:\microsoft visual studio 8\vc\include\xstring(900): or 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator +=(_Elem)' with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char> ] while trying to match the argument list '(std::string, boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>>)' with [ <unnamed-symbol>=boost::lambda::detail::return_type_2_arithmetic_phase_3<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::basic_string<char,std::char_traits<char>,std::allocator<char>>> ] c:\program files\boost\boost_1_36_0\boost\lambda\detail\lambda_functors.hpp(148) : see reference to function template instantiation 'RET boost::lambda::lambda_functor_base<Act,Args>::call<std::basic_string<_Elem,_Traits,_Ax>&,A,const boost::tuples::null_type,const boost::tuples::null_type,const boost::tuples::null_type>(A &,B &,C &,Env &) const' being compiled with [ RET=std::basic_string<char,std::char_traits<char>,std::allocator<char>> &, Act=boost::lambda::arithmetic_assignment_action<boost::lambda::plus_action>, Args=boost::tuples::tuple<std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::arithmetic_action<boost::lambda::plus_action>,boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>>,boost::lambda::lambda_functor<boost::lambda::identity<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>, _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char>, A=std::basic_string<char,std::char_traits<char>,std::allocator<char>>, B=const boost::tuples::null_type, C=const boost::tuples::null_type, Env=const boost::tuples::null_type ] f:\microsoft visual studio 8\vc\include\algorithm(29) : see reference to function template instantiation 'std::basic_string<_Elem,_Traits,_Ax> &boost::lambda::lambda_functor<T>::operator ()<std::basic_string<_Elem,_Traits,_Ax>>(A &) const' being compiled with [ _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char>, T=boost::lambda::lambda_functor_base<boost::lambda::arithmetic_assignment_action<boost::lambda::plus_action>,boost::tuples::tuple<std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::arithmetic_action<boost::lambda::plus_action>,boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>>,boost::lambda::lambda_functor<boost::lambda::identity<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>, A=std::basic_string<char,std::char_traits<char>,std::allocator<char>> ] c:\documents and settings\stefan\my documents\visual studio 2005\projects\simple\simple\simple.cpp(22) : see reference to function template instantiation '_Fn1 std::for_each<std::_Vector_iterator<_Ty,_Alloc>,boost::lambda::lambda_functor<T>>(_InIt,_InIt,_Fn1)' being compiled with [ _Fn1=boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::arithmetic_assignment_action<boost::lambda::plus_action>,boost::tuples::tuple<std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::arithmetic_action<boost::lambda::plus_action>,boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>>,boost::lambda::lambda_functor<boost::lambda::identity<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>>, _Ty=std::string, _Alloc=std::allocator<std::string>, T=boost::lambda::lambda_functor_base<boost::lambda::arithmetic_assignment_action<boost::lambda::plus_action>,boost::tuples::tuple<std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::arithmetic_action<boost::lambda::plus_action>,boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::placeholder<1>>,boost::lambda::lambda_functor<boost::lambda::identity<const std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>, _InIt=std::_Vector_iterator<std::string,std::allocator<std::string>> ] Yours sincerely, Steven
AMDG stefys wrote:
Hello, I've been trying to use Boost.Lambda in one of my simple applications, but I can't seem to get the following code to compile: for_each(vect.begin(), vect.end(), (var(str) += _1+constant(string(", ")) )); Where vect is a std::vector<std::string> and str is a std::string. I have included these headers: <boost/lambda/lambda.hpp>, <vector>, <string>, <algorithm>. Here is the complete error I'm getting (using MSVC2005): c:\program files\boost\boost_1_36_0\boost\lambda\detail\operator_lambda_func_base.hpp(225) : error C2679: binary '+=' : no operator found which takes a right-hand operand of type 'boost::lambda::detail::return_type_deduction_failure<<unnamed-symbol>>' (or there is no acceptable conversion) <snip>
Boost.Lambda doesn't know about std::string. See https://svn.boost.org/trac/boost/ticket/781 In Christ, Steven Watanabe
participants (2)
-
stefys
-
Steven Watanabe