Boost logo

Boost Users :

Subject: Re: [Boost-users] [bind/lambda] Matching signature constness?
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2008-12-10 10:41:55


On Wed, Dec 10, 2008 at 2:37 PM, Frank Mori Hess <frank.hess_at_[hidden]>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.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net