diff --git a/include/boost/container/detail/flat_tree.hpp b/include/boost/container/detail/flat_tree.hpp index 061b840..e131cf1 100644 --- a/include/boost/container/detail/flat_tree.hpp +++ b/include/boost/container/detail/flat_tree.hpp @@ -921,11 +921,11 @@ class flat_tree std::pair emplace_unique(BOOST_FWD_REF(Args)... args) { typename aligned_storage::value>::type v; - value_type &val = *static_cast(static_cast(v.data)); + value_type *pval = reinterpret_cast(v.data); get_stored_allocator_noconst_return_t a = this->get_stored_allocator(); - stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); - value_destructor d(a, val); - return this->insert_unique(::boost::move(val)); + stored_allocator_traits::construct(a, pval, ::boost::forward(args)... ); + value_destructor d(a, *pval); + return this->insert_unique(::boost::move(*pval)); } template @@ -933,22 +933,22 @@ class flat_tree { //hint checked in insert_unique typename aligned_storage::value>::type v; - value_type &val = *static_cast(static_cast(v.data)); + value_type *pval = reinterpret_cast(v.data); get_stored_allocator_noconst_return_t a = this->get_stored_allocator(); - stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); - value_destructor d(a, val); - return this->insert_unique(hint, ::boost::move(val)); + stored_allocator_traits::construct(a, pval, ::boost::forward(args)... ); + value_destructor d(a, *pval); + return this->insert_unique(hint, ::boost::move(*pval)); } template iterator emplace_equal(BOOST_FWD_REF(Args)... args) { typename aligned_storage::value>::type v; - value_type &val = *static_cast(static_cast(v.data)); + value_type *pval = reinterpret_cast(v.data); get_stored_allocator_noconst_return_t a = this->get_stored_allocator(); - stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); - value_destructor d(a, val); - return this->insert_equal(::boost::move(val)); + stored_allocator_traits::construct(a, pval, ::boost::forward(args)... ); + value_destructor d(a, *pval); + return this->insert_equal(::boost::move(*pval)); } template @@ -956,11 +956,11 @@ class flat_tree { //hint checked in insert_equal typename aligned_storage::value>::type v; - value_type &val = *static_cast(static_cast(v.data)); + value_type *pval = reinterpret_cast(v.data); get_stored_allocator_noconst_return_t a = this->get_stored_allocator(); - stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); - value_destructor d(a, val); - return this->insert_equal(hint, ::boost::move(val)); + stored_allocator_traits::construct(a, pval, ::boost::forward(args)... ); + value_destructor d(a, *pval); + return this->insert_equal(hint, ::boost::move(*pval)); } template @@ -993,44 +993,44 @@ class flat_tree std::pair emplace_unique(BOOST_MOVE_UREF##N)\ {\ typename aligned_storage::value>::type v;\ - value_type &val = *static_cast(static_cast(v.data));\ + value_type *pval = reinterpret_cast(v.data);\ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\ - stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ - value_destructor d(a, val);\ - return this->insert_unique(::boost::move(val));\ + stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ + value_destructor d(a, *pval);\ + return this->insert_unique(::boost::move(*pval));\ }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ iterator emplace_hint_unique(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ typename aligned_storage::value>::type v;\ - value_type &val = *static_cast(static_cast(v.data));\ + value_type *pval = reinterpret_cast(v.data);\ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\ - stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ - value_destructor d(a, val);\ - return this->insert_unique(hint, ::boost::move(val));\ + stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ + value_destructor d(a, *pval);\ + return this->insert_unique(hint, ::boost::move(*pval));\ }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ iterator emplace_equal(BOOST_MOVE_UREF##N)\ {\ typename aligned_storage::value>::type v;\ - value_type &val = *static_cast(static_cast(v.data));\ + value_type *pval = reinterpret_cast(v.data);\ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\ - stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ - value_destructor d(a, val);\ - return this->insert_equal(::boost::move(val));\ + stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ + value_destructor d(a, *pval);\ + return this->insert_equal(::boost::move(*pval));\ }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ iterator emplace_hint_equal(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ typename aligned_storage ::value>::type v;\ - value_type &val = *static_cast(static_cast(v.data));\ + value_type *pval = reinterpret_cast(v.data);\ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\ - stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ - value_destructor d(a, val);\ - return this->insert_equal(hint, ::boost::move(val));\ + stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ + value_destructor d(a, *pval);\ + return this->insert_equal(hint, ::boost::move(*pval));\ }\ template \ BOOST_CONTAINER_FORCEINLINE std::pair\