Add workaround for MSVC 14-0 bad code generation in slist_test

This commit is contained in:
Ion Gaztañaga
2023-05-04 23:12:23 +02:00
parent f2afafa6bb
commit cfc6b4e510
3 changed files with 45 additions and 52 deletions
@@ -91,25 +91,15 @@ BOOST_INTRUSIVE_FORCEINLINE std::ptrdiff_t offset_from_pointer_to_member(const M
template<class Parent, class Member>
BOOST_INTRUSIVE_FORCEINLINE Parent *parent_from_member(Member *member, const Member Parent::* ptr_to_member)
{
return static_cast<Parent*>
(
static_cast<void*>
(
static_cast<char*>(static_cast<void*>(member)) - offset_from_pointer_to_member(ptr_to_member)
)
);
return reinterpret_cast<Parent*>
(reinterpret_cast<std::size_t>(member) - static_cast<std::size_t>(offset_from_pointer_to_member(ptr_to_member)));
}
template<class Parent, class Member>
BOOST_INTRUSIVE_FORCEINLINE const Parent *parent_from_member(const Member *member, const Member Parent::* ptr_to_member)
{
return static_cast<const Parent*>
(
static_cast<const void*>
(
static_cast<const char*>(static_cast<const void*>(member)) - offset_from_pointer_to_member(ptr_to_member)
)
);
return reinterpret_cast<const Parent*>
( reinterpret_cast<std::size_t>(member) - static_cast<std::size_t>(offset_from_pointer_to_member(ptr_to_member)) );
}
} //namespace detail {
@@ -152,7 +152,7 @@ class linear_slist_algorithms
//!
//! <b>Throws</b>: Nothing.
inline static void init_header(node_ptr this_node) BOOST_NOEXCEPT
{ NodeTraits::set_next(this_node, node_ptr ()); }
{ NodeTraits::set_next(this_node, node_ptr()); }
//! <b>Requires</b>: 'p' is the first node of a list.
//!