|
Boost Users : |
From: Kris Braun (kris_braun_at_[hidden])
Date: 2004-02-25 10:12:40
--- David Abrahams <dave_at_[hidden]> wrote:
> Need more details. Post a reproducible test that
> fails compilation
> and I might be able to solve your problem.
Okay, here's all the code for the test:
#include <map>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/iterator/indirect_iterator.hpp>
template< class Pair >
struct select_second {
typedef typename Pair::second_type result_type;
typename Pair::second_type& operator( )( Pair&
pair )
{ return pair.second; }
const typename Pair::second_type& operator( )(
const Pair& pair ) const
{ return pair.second; }
};
template< class Iterator >
struct map_iterator {
typedef boost::transform_iterator< select_second<
typename Iterator::value_type >, Iterator >
type;
static type Create( const Iterator&
iter )
{ return type( iter );
}
};
template< class Iterator >
struct pointer_map_iterator {
typedef typename map_iterator< Iterator >::type
inner_type;
typedef boost::indirect_iterator< inner_type >
type;
static type Create( const Iterator&
iter )
{ return type(
inner_type( iter ) ); }
};
typedef std::map< int, int* > MapType;
typedef pointer_map_iterator< MapType::iterator >
iterator_generator;
typedef pointer_map_iterator< MapType::const_iterator
> const_iterator_generator;
typedef iterator_generator::type iterator;
typedef const_iterator_generator::type const_iterator;
struct Foo {
iterator begin( void )
{ return iterator_generator::Create( m.begin(
) ); }
iterator end( void )
{ return iterator_generator::Create( m.end( )
); }
MapType m;
};
void foo( void )
{
Foo f;
for( const_iterator i = f.begin( ); i != f.end( );
++i ) { }
}
When compiled with VC7.1, this produces:
src\util\test.cpp(53) : error C2440: 'initializing' :
cannot convert from 'iterator' to
boost::indirect_iterator<Iterator>'
with
[
Iterator=pointer_map_iterator<std::map<int,int
*>::const_iterator>::inner_type
]
No constructor could take the source type, or
constructor overload resolution was ambiguous
src\util\test.cpp(53) : error C2678: binary '!=' : no
operator found which takes a left-hand operand of type
'const_iterator' (or there is no acceptable
conversion)
Thanks,
Kris
__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools
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