I wrote an iterator to do recursive directory iteration. The heart of it
is:
template< typename Predicate >
class recursive_directory_iterator
: public boost::iterator_adaptor<
boost::shared_ptr< detail::rdi_imp< Predicate > >,
detail::rdi_policies,
const boost::filesystem::path,
const boost::filesystem::path &,
const boost::filesystem::path *,
std::input_iterator_tag,
std::ptrdiff_t >
{ ... };
Works fine as long as you stay away from operator->.
For example,
fs::recursive_directory_iterator rdi( dir , dummy );
fs::recursive_directory_iterator rdi_end;
for ( ; rdi != rdi_end; ++rdi )
{
// std::cout << rdi->generic_path() << std::endl;
std::cout << (*rdi).generic_path() << std::endl;
}
works as expected. But if you uncomment the commented line, the program
fails in the call to operator->. What "fails" means depends on the
execution environment; whatever is happening seems to confuse the debugger,
stepping doesn't shed much light on the problem. Same symptoms with both
VC++7 and Intel 6.0.
I suppose I'm doing something stupid, but don't have a clue as to what.
I notice in iterator_adaptor_test.cpp that operator-> is not actually
exercised. Is it possible there is a bug in it for input iterators? I've
not had similar problems with iterator_adaptor for bidirectional iterators.
Any help appreciated,
--Beman