////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace boost::intrusive; struct Type : list_base_hook<> , slist_base_hook<> , set_base_hook<> , avl_set_base_hook<> , bs_set_base_hook<> {}; typedef boost::aligned_storage::type buffer_t; static buffer_t buffer_0x00; static buffer_t buffer_0xFF; template const Iterator &on_0x00_buffer() { BOOST_STATIC_ASSERT(sizeof(buffer_t) >= sizeof(Iterator)); return * ::new(std::memset(&buffer_0x00, 0x00, sizeof(buffer_0x00))) Iterator(); } template const Iterator &on_0xFF_buffer() { BOOST_STATIC_ASSERT(sizeof(buffer_t) >= sizeof(Iterator)); return * ::new(std::memset(&buffer_0xFF, 0xFF, sizeof(buffer_0xFF))) Iterator(); } BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reverse_iterator) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_reverse_iterator) template void check_null_iterators() { typedef typename Container::iterator iterator; typedef typename Container::const_iterator const_iterator; typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT (::, Container ,reverse_iterator, iterator) reverse_iterator; typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT (::, Container ,const_reverse_iterator, const_iterator) const_reverse_iterator; BOOST_TEST(on_0xFF_buffer() == on_0x00_buffer()); BOOST_TEST(on_0xFF_buffer() == on_0x00_buffer()); BOOST_TEST(on_0xFF_buffer() == on_0x00_buffer()); BOOST_TEST(on_0xFF_buffer() == on_0x00_buffer()); } int main() { check_null_iterators< list >(); check_null_iterators< slist >(); check_null_iterators< bs_set >(); check_null_iterators< set >(); check_null_iterators< multiset >(); check_null_iterators< avl_set >(); check_null_iterators< avl_multiset >(); check_null_iterators< sg_set >(); check_null_iterators< sg_multiset >(); check_null_iterators< treap_set >(); check_null_iterators< treap_multiset >(); check_null_iterators< splay_set >(); check_null_iterators< splay_multiset >(); return boost::report_errors(); }