forked from boostorg/move
-> Added new meta-utils that were duplicated in Container & Intrusive.
-> Use some of them to avoid SFINAE instantiation errors in some old compilers. -> Added a macro to static_cast or reinterpret_cast to rv<T> so in the future we can avoid some sanitizer errors when using static_cast
This commit is contained in:
1 parent
0ebc3f4682
commit
4f9c2b62fb
6 files changed
+335
-88
No files matched your search
@@ -47,24 +47,33 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value && !has_move_emulation_enabled<T>::value, T&>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< T &
|
||||
, enable_move_utility_emulation<T>
|
||||
, has_move_emulation_disabled<T>
|
||||
>::type
|
||||
move(T& x) BOOST_NOEXCEPT
|
||||
{
|
||||
return x;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value, rv<T>&>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< rv<T>&
|
||||
, enable_move_utility_emulation<T>
|
||||
, has_move_emulation_enabled<T>
|
||||
>::type
|
||||
move(T& x) BOOST_NOEXCEPT
|
||||
{
|
||||
return *static_cast<rv<T>* >(::boost::move_detail::addressof(x));
|
||||
return *BOOST_MOVE_TO_RV_CAST(::boost::rv<T>*, ::boost::move_detail::addressof(x) );
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value, rv<T>&>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< rv<T>&
|
||||
, enable_move_utility_emulation<T>
|
||||
, has_move_emulation_enabled<T>
|
||||
>::type
|
||||
move(rv<T>& x) BOOST_NOEXCEPT
|
||||
{
|
||||
return x;
|
||||
@@ -77,17 +86,23 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value && ::boost::move_detail::is_rv<T>::value, T &>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< T &
|
||||
, enable_move_utility_emulation<T>
|
||||
, ::boost::move_detail::is_rv<T>
|
||||
>::type
|
||||
forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
|
||||
{
|
||||
return const_cast<T&>(x);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value && !::boost::move_detail::is_rv<T>::value, const T &>::type
|
||||
forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< const T &
|
||||
, enable_move_utility_emulation<T>
|
||||
, ::boost::move_detail::is_not_rv<T>
|
||||
>::type
|
||||
forward(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
|
||||
{
|
||||
return x;
|
||||
}
|
||||
@@ -99,22 +114,25 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value &&
|
||||
::boost::move_detail::is_rv<T>::value
|
||||
, T &>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< T &
|
||||
, enable_move_utility_emulation<T>
|
||||
, ::boost::move_detail::is_rv<T>
|
||||
>::type
|
||||
move_if_not_lvalue_reference(const typename ::boost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
|
||||
{
|
||||
return const_cast<T&>(x);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value &&
|
||||
!::boost::move_detail::is_rv<T>::value &&
|
||||
(::boost::move_detail::is_lvalue_reference<T>::value ||
|
||||
!has_move_emulation_enabled<T>::value)
|
||||
, typename ::boost::move_detail::add_lvalue_reference<T>::type
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< typename ::boost::move_detail::add_lvalue_reference<T>::type
|
||||
, enable_move_utility_emulation<T>
|
||||
, ::boost::move_detail::is_not_rv<T>
|
||||
, ::boost::move_detail::or_
|
||||
< ::boost::move_detail::is_lvalue_reference<T>
|
||||
, has_move_emulation_disabled<T>
|
||||
>
|
||||
>::type
|
||||
move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT
|
||||
{
|
||||
@@ -122,12 +140,14 @@
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline typename ::boost::move_detail::enable_if_c
|
||||
< enable_move_utility_emulation<T>::value &&
|
||||
!::boost::move_detail::is_rv<T>::value &&
|
||||
(!::boost::move_detail::is_lvalue_reference<T>::value &&
|
||||
has_move_emulation_enabled<T>::value)
|
||||
, rv<T>&
|
||||
inline typename ::boost::move_detail::enable_if_and
|
||||
< rv<T>&
|
||||
, enable_move_utility_emulation<T>
|
||||
, ::boost::move_detail::is_not_rv<T>
|
||||
, ::boost::move_detail::and_
|
||||
< ::boost::move_detail::not_< ::boost::move_detail::is_lvalue_reference<T> >
|
||||
, has_move_emulation_enabled<T>
|
||||
>
|
||||
>::type
|
||||
move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user