Use BOOST_MOVE_TO_LV in pair to avoid potential UB

This commit is contained in:
Ion Gaztañaga
2022-01-02 00:26:44 +01:00
parent 2ed03bcba5
commit b6020f5d73

View File

@@ -246,7 +246,7 @@ struct pair
//pair move constructor //pair move constructor
pair(BOOST_RV_REF(pair) p) pair(BOOST_RV_REF(pair) p)
: first(::boost::move(p.first)), second(::boost::move(p.second)) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second))
{ {
BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));
} }
@@ -260,7 +260,7 @@ struct pair
template <class D, class S> template <class D, class S>
pair(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p) pair(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p)
: first(::boost::move(p.first)), second(::boost::move(p.second)) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second))
{ {
BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));
} }
@@ -296,14 +296,14 @@ struct pair
} }
pair(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p) pair(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p)
: first(::boost::move(p.first)), second(::boost::move(p.second)) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second))
{ {
BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));
} }
template <class D, class S> template <class D, class S>
pair(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p) pair(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p)
: first(::boost::move(p.first)), second(::boost::move(p.second)) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second))
{ {
BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));
} }
@@ -440,8 +440,8 @@ struct pair
//pair move assignment //pair move assignment
pair& operator=(BOOST_RV_REF(pair) p) pair& operator=(BOOST_RV_REF(pair) p)
{ {
first = ::boost::move(p.first); first = ::boost::move(BOOST_MOVE_TO_LV(p).first);
second = ::boost::move(p.second); second = ::boost::move(BOOST_MOVE_TO_LV(p).second);
return *this; return *this;
} }
@@ -466,8 +466,8 @@ struct pair
>::type >::type
operator=(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p) operator=(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p)
{ {
first = ::boost::move(p.first); first = ::boost::move(BOOST_MOVE_TO_LV(p).first);
second = ::boost::move(p.second); second = ::boost::move(BOOST_MOVE_TO_LV(p).second);
return *this; return *this;
} }
//std::pair copy assignment //std::pair copy assignment
@@ -489,16 +489,16 @@ struct pair
//std::pair move assignment //std::pair move assignment
pair& operator=(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p) pair& operator=(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p)
{ {
first = ::boost::move(p.first); first = ::boost::move(BOOST_MOVE_TO_LV(p).first);
second = ::boost::move(p.second); second = ::boost::move(BOOST_MOVE_TO_LV(p).second);
return *this; return *this;
} }
template <class D, class S> template <class D, class S>
pair& operator=(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p) pair& operator=(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p)
{ {
first = ::boost::move(p.first); first = ::boost::move(BOOST_MOVE_TO_LV(p).first);
second = ::boost::move(p.second); second = ::boost::move(BOOST_MOVE_TO_LV(p).second);
return *this; return *this;
} }