On Wed, Dec 10, 2008 at 2:37 PM, Frank Mori Hess <frank.hess@nist.gov> wrote:
Thanks for that Frank - that just shows the perils of not posting the exact code
which is causing problems!
I have fabricated a much shorter example which exhibits the same issue for me...
#include <cstddef>
#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"
#include "boost/function.hpp"
template < typename T >
bool is_zero( const T & t )
{
return t == 0;
}
template < typename T, std :: size_t sz >
bool first_element_equal_zero( const T ( & array )[ sz ] )
{
using namespace boost;
using lambda :: bind;
using lambda :: _1;
using lambda :: constant_ref;
function< const T &( unsigned ) > element = constant_ref( array )[ _1 ];
function< bool( unsigned ) > e = bind( is_zero< T >, element( _1 ) );
return e( 0 );
}
int main( )
{
int a[ 10 ];
first_element_equal_zero( a );
}
$ g++ -c element.cpp
element.cpp: In function `bool first_element_equal_zero(const T (&)[sz]) [with T = int, unsigned int sz = 10u]':
element.cpp:30: instantiated from here
element.cpp:21: error: no match for call to `(boost::function<const int&()(unsigned int)>) (const boost::lambda::lambda_
functor<boost::lambda::placeholder<1> >&)'
/usr/include/boost/function/function_template.hpp:810: note: candidates are: typename boost::function1<R, T0>::result_ty
pe boost::function1<R, T0>::operator()(T0) const [with R = const int&, T0 = unsigned int]
Which still evades my comprehension! I'd appreciate some guidance here.
Thanks.
- Rob.