int main()
{
  {
    typedef boost::indirect_iterator<int**> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, int);
    STATIC_ASSERT_SAME(Iter::reference, int&);  
    STATIC_ASSERT_SAME(Iter::pointer, int*);  
    STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t);
    
    BOOST_STATIC_ASSERT((boost::is_convertible<Iter::iterator_category,
             std::random_access_iterator_tag>::value));
    BOOST_STATIC_ASSERT((boost::is_convertible<boost::iterator_traversal<Iter>::type,
             boost::random_access_traversal_tag>::value));
  }
  {
    typedef boost::indirect_iterator<int const**> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, int);
    STATIC_ASSERT_SAME(Iter::reference, const int&);
    STATIC_ASSERT_SAME(Iter::pointer, const int*);    // (**)
  }
  {
    typedef boost::indirect_iterator<int**, int> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, int);
    STATIC_ASSERT_SAME(Iter::reference, int&);  
    STATIC_ASSERT_SAME(Iter::pointer, int*);  
  }
  {
    typedef boost::indirect_iterator<int**, const int> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, int);
    STATIC_ASSERT_SAME(Iter::reference, const int&);  
    STATIC_ASSERT_SAME(Iter::pointer, const int*);    // (**)
  }
  {
    typedef boost::indirect_iterator<my_ptr*> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, zow);
    STATIC_ASSERT_SAME(Iter::reference, const zow&);  // (**)
    STATIC_ASSERT_SAME(Iter::pointer, const zow*);    // (**)
    
    STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t);
    
    BOOST_STATIC_ASSERT((boost::is_convertible<Iter::iterator_category,
             std::random_access_iterator_tag>::value));
    BOOST_STATIC_ASSERT((boost::is_convertible<boost::iterator_traversal<Iter>::type,
             boost::random_access_traversal_tag>::value));
  }
  {
    typedef boost::indirect_iterator<char**, int, std::random_access_iterator_tag, long&, short> Iter;
    STATIC_ASSERT_SAME(Iter::value_type, int);
    STATIC_ASSERT_SAME(Iter::reference, long&);  
    STATIC_ASSERT_SAME(Iter::pointer, int*);  
    STATIC_ASSERT_SAME(Iter::difference_type, short);  
  }
  return 0;
}
Esempio n. 2
0
TICK_STATIC_TEST_CASE()
{
    typedef tick::detail::set<int, float, double> set1;
    typedef typename tick::detail::set_insert<set1, long>::type set2;
    typedef tick::detail::set<int, float, double, long> set3;
    STATIC_ASSERT_SAME(set3, set2);
};