From: Louis Dionne Date: Thu, 9 Mar 2023 17:30:08 +0000 (-0500) Subject: [libc++] Remove conditional usage of rvalue references in C++03 X-Git-Tag: upstream/17.0.6~15202 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99b7c2bad3e5898353223c4682dce8ce31a69f30;p=platform%2Fupstream%2Fllvm.git [libc++] Remove conditional usage of rvalue references in C++03 This one is easy -- Clang supports rvalue references in C++03 mode, so we should be able to remove that conditional. As a fly-by fix, turn a few static_casts to std::forward. Differential Revision: https://reviews.llvm.org/D145701 --- diff --git a/libcxx/include/exception b/libcxx/include/exception index 2b08f11..2b5cfd5 100644 --- a/libcxx/include/exception +++ b/libcxx/include/exception @@ -87,6 +87,7 @@ template void rethrow_if_nested(const E& e); #include <__type_traits/is_copy_constructible.h> #include <__type_traits/is_final.h> #include <__type_traits/is_polymorphic.h> +#include <__utility/forward.h> #include #include #include @@ -313,20 +314,16 @@ struct __throw_with_nested<_Tp, _Up, true> { _LIBCPP_NORETURN static inline _LIBCPP_INLINE_VISIBILITY void __do_throw(_Tp&& __t) { - throw __nested<_Up>(static_cast<_Tp&&>(__t)); + throw __nested<_Up>(std::forward<_Tp>(__t)); } }; template struct __throw_with_nested<_Tp, _Up, false> { _LIBCPP_NORETURN static inline _LIBCPP_INLINE_VISIBILITY void -#ifndef _LIBCPP_CXX03_LANG __do_throw(_Tp&& __t) -#else - __do_throw (_Tp& __t) -#endif // _LIBCPP_CXX03_LANG { - throw static_cast<_Tp&&>(__t); + throw std::forward<_Tp>(__t); } }; #endif @@ -343,7 +340,7 @@ throw_with_nested(_Tp&& __t) is_class<_Up>::value && !is_base_of::value && !__libcpp_is_final<_Up>::value>:: - __do_throw(static_cast<_Tp&&>(__t)); + __do_throw(std::forward<_Tp>(__t)); #else ((void)__t); // FIXME: Make this abort