diff --git a/doc/container.qbk b/doc/container.qbk index 0ed8e59..d690491 100644 --- a/doc/container.qbk +++ b/doc/container.qbk @@ -1338,6 +1338,13 @@ use [*Boost.Container]? There are several reasons for that: [section:release_notes Release Notes] +[section:release_notes_boost_1_80_00 Boost 1.80 Release] + +* Fixed bugs/issues: + * [@https://github.com/boostorg/container/issues/222 GitHub #222: ['"Fix incomplete type error when using list with pair"]]. + +[endsect] + [section:release_notes_boost_1_79_00 Boost 1.79 Release] * The library now compiles without warnings with GCC's -Wcast-align=strict diff --git a/include/boost/container/detail/hash_table.hpp b/include/boost/container/detail/hash_table.hpp index 306606d..cc165dc 100644 --- a/include/boost/container/detail/hash_table.hpp +++ b/include/boost/container/detail/hash_table.hpp @@ -93,7 +93,7 @@ struct hash_table_internal_data_type< std::pair > }; template -struct iiterator_node_value_type< base_node > > +struct iiterator_node_value_type< base_node, true > > { typedef T type; }; @@ -185,7 +185,7 @@ struct intrusive_hash_table_type typedef typename boost::container:: allocator_traits::size_type size_type; typedef base_node > node_t; + , true > node_t; //Deducing the hook type from node_t (e.g. node_t::hook_type) would //provoke an early instantiation of node_t that could ruin recursive //hash_table definitions, so retype the complete type to avoid any problem. diff --git a/include/boost/container/detail/node_alloc_holder.hpp b/include/boost/container/detail/node_alloc_holder.hpp index 24d9e46..3efdb0f 100644 --- a/include/boost/container/detail/node_alloc_holder.hpp +++ b/include/boost/container/detail/node_alloc_holder.hpp @@ -54,7 +54,7 @@ namespace container { //This trait is used to type-pun std::pair because in C++03 //compilers std::pair is useless for C++11 features -template::value > +template struct node_internal_data_type { typedef T type; @@ -68,13 +68,13 @@ struct node_internal_data_type< T, true> type; }; -template +template struct base_node : public HookDefiner::type { public: typedef T value_type; - typedef typename node_internal_data_type::type internal_type; + typedef typename node_internal_data_type::value>::type internal_type; typedef typename HookDefiner::type hook_type; typedef typename dtl::aligned_storage::value>::type storage_t; diff --git a/include/boost/container/detail/tree.hpp b/include/boost/container/detail/tree.hpp index 912c925..7f26e1f 100644 --- a/include/boost/container/detail/tree.hpp +++ b/include/boost/container/detail/tree.hpp @@ -122,7 +122,7 @@ struct tree_internal_data_type< std::pair > }; template -struct iiterator_node_value_type< base_node > > +struct iiterator_node_value_type< base_node, true > > { typedef T type; }; @@ -231,7 +231,7 @@ struct intrusive_tree_type typedef typename boost::container:: allocator_traits::void_pointer void_pointer; typedef base_node > node_t; + , true > node_t; //Deducing the hook type from node_t (e.g. node_t::hook_type) would //provoke an early instantiation of node_t that could ruin recursive //tree definitions, so retype the complete type to avoid any problem.