|
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