Boost logo

Boost Users :

From: Noah Roberts (roberts.noah_at_[hidden])
Date: 2006-11-29 13:48:30


If I change the parameter of first_pipe to "T & cont" this code
compiles. As it stands I get this error on the lambda part of the
algorithm call.

Error 1 error C2664:
'std::list<_Ty>::_Iterator<_Secure_validation>::_Iterator(const
std::list<_Ty>::_Iterator<_Secure_validation> &)' : cannot convert
parameter 1 from 'std::list<_Ty>::_Const_iterator<_Secure_validation>'
to 'const std::list<_Ty>::_Iterator<_Secure_validation> &'

How can I adjust my usage so that the lambda function construction
resolves the correct constness and will accept the const iterator?

Thanks....code follows.

#include <iostream>
#include <list>
#include <boost/shared_ptr.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>

#include <boost/shared_ptr.hpp>

namespace esi
{
  namespace metafunc
  {

    template < typename T >
    struct dereference_type { typedef T type; };

    template < typename T >
    struct dereference_type< T* > { typedef T type; };

    template < typename T >
    struct dereference_type< boost::shared_ptr< T > > { typedef T type; };

  }
}

template < typename T >
typename T::iterator first_pipe(T const& cont)
{
  namespace l = boost::lambda;
  typedef esi::metafunc::dereference_type<T::value_type>::type value_type;

  return std::find_if(cont.begin(), cont.end(),
                      l::bind(&value_type::GetType, l::_1) == DT_PIPE);

}

enum DT_TYPE { DT_PUMP, DT_PIPE };
struct mock_pipe
{
  bool pipe;
  mock_pipe(bool b) : pipe(b) {}
  DT_TYPE GetType() const {
    return pipe ? DT_PIPE : DT_PUMP;
  }
};

void test_first_pipe()
{
  typedef std::list<mock_pipe*> list1_t;
  std::list<mock_pipe*> l;
  l.push_back(new mock_pipe(false));
  l.push_back(new mock_pipe(false));
  l.push_back(new mock_pipe(false));

  list1_t::iterator fit = first_pipe(l);

}

int main(void)
{
  test_first_pipe();
}


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