Boost logo

Boost Users :

From: Ed Fisher (efisher_at_[hidden])
Date: 2006-03-23 08:04:51


Using Boost 1_33_1 and Visual Studio 8. Any and all help appreciated.....
 
Working with "The FlySwapper" example in the "C++ Template Metaprogramming" book. Pages 22-24. It crashes when I do this:
     
           std::vector<bool>::iterator i1;
           std::vector<bool>::iterator i2;
           use_swap( &i1, &i2 ) // crash here
 
All other types I try work fine. But doing <bool> crashes on this line:
 
  iter_swap_impl<use_swap>::do_it(*i1,*i2); // ouch!!!
 
Debug looks like it stopped somewere within vector debug during boost::apply processing.
 
// Fly Swapper code .....
 
<snip>
 
template <bool use_swap> struct iter_swap_impl;
template < class ForwardIterator1, class ForwardIterator2 >
void iter_swap(ForwardIterator1 i1, ForwardIterator2 i2 )
{
  typedef std::iterator_traits< ForwardIterator1 > traits1;
  typedef typename traits1::value_type v1;
  typedef typename traits1::reference r1;
  
  typedef std::iterator_traits< ForwardIterator2 > traits2;
  typedef typename traits2::value_type v2;
  typedef typename traits2::reference r2;
  bool const use_swap = boost::is_same<v1, v2>::value
    && boost::is_reference<r1>::value
    && boost::is_reference<r2>::value;
  iter_swap_impl<use_swap>::do_it(*i1,*i2); //***** CRASH CRASH here
}
template <>
struct iter_swap_impl<true> // fast one
{
  template < class ForwardIterator1, class ForwardIterator2 >
  static void do_it( ForwardIterator1 i1, ForwardIterator2 i2 )
  {
    std::cout << "use_swap is TRUE" << std::endl;
  }
};
template<>
struct iter_swap_impl<false>
{
  template < class ForwardIterator1, class ForwardIterator2 >
  static void do_it( ForwardIterator1 i1, ForwardIterator2 i2 )
  {
    std::cout << "use_swap is FALSE" << std::endl;
  }
};
</snip>




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