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; }
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); };