Boost logo

Boost Users :

Subject: Re: [Boost-users] Annoying coding
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2009-01-20 11:14:22


On Tue, Jan 20, 2009 at 3:52 PM, Maxim Koshelev <chuchelo_at_[hidden]> wrote:

> > This one IS tested!
> ...
> yes, this worked, but next, more simple example not work:
>
> std::map <int, std::string> m;
> std::vector <int> v;
>
> std::transform( m.begin(), m.end(), std::backinserter(v),
> bind(&std::pair<const int, std::string>::second, _1) );
>
>
> even replacing 'bind' by _1 ->* &std::pair<const
> int,std::string>::second doesn't work.
> GCC 4.1.2 reports:
> error: reference to '_1' is ambiguous
> /usr/include/boost/lambda/core.hpp:69: error: candidates are: const
> boost::lambda::placeholder1_type& boost::lambda::<unnamed>::_1
> /usr/include/boost/bind/placeholders.hpp:30: error:
> boost::arg<1><unnamed>::_1()
> services.cc:56: error: reference to '_1' is ambiguous
> _______________________________________________
>

This works for me...

#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"
#include <vector>
#include <map>
#include <algorithm>
#include <iterator>
#include <iostream>

int main( )
{
  using namespace boost::lambda;

  std::map<int,std::string> v;
  std::vector<int> i;

  for ( unsigned i=1; i != 6; ++i)
    v.insert( std::pair<const int,std::string>(i,"") );

  std::transform(
      v.begin(),
      v.end(),
      std::back_inserter(i),
      bind(&std::pair<const int,std::string>::first, _1)
      );

}

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