From cb4f9a8c05fd36d78faaddb4635b4bfb80bba457 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 15 Jun 2018 01:19:07 +0100 Subject: [PATCH] LWG 3039 Unnecessary decay in thread and packaged_task * include/std/future (__constrain_pkgdtask): Replace with ... (packaged_task::__not_same): New alias template, using __remove_cvref_t instead of decay. * include/std/thread (thread::__not_same): Add comment. From-SVN: r261618 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/std/future | 23 +++++++++-------------- libstdc++-v3/include/std/thread | 1 + 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e368044232f..aafffa58c5c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2018-06-15 Jonathan Wakely + + LWG 3039 Unnecessary decay in thread and packaged_task + * include/std/future (__constrain_pkgdtask): Replace with ... + (packaged_task::__not_same): New alias template, using + __remove_cvref_t instead of decay. + * include/std/thread (thread::__not_same): Add comment. + 2018-06-14 Jonathan Wakely LWG 3075 basic_string needs deduction guides from basic_string_view diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index c17a253d26e..937c05ef2b2 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -1462,15 +1462,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_cast<_Alloc&>(_M_impl)); } - template::type>::value> - struct __constrain_pkgdtask - { typedef void __type; }; - - template - struct __constrain_pkgdtask<_Task, _Fn, true> - { }; - /// packaged_task template class packaged_task<_Res(_ArgTypes...)> @@ -1478,6 +1469,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef __future_base::_Task_state_base<_Res(_ArgTypes...)> _State_type; shared_ptr<_State_type> _M_state; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3039. Unnecessary decay in thread and packaged_task + template> + using __not_same + = typename enable_if::value>::type; + public: // Construction and destruction packaged_task() noexcept { } @@ -1488,8 +1485,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION packaged_task(allocator_arg_t, const _Allocator& __a) noexcept { } - template::__type> + template> explicit packaged_task(_Fn&& __fn) : packaged_task(allocator_arg, std::allocator(), @@ -1499,11 +1495,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2097. packaged_task constructors should be constrained // 2407. [this constructor should not be] explicit - template::__type> + template> packaged_task(allocator_arg_t, const _Alloc& __a, _Fn&& __fn) : _M_state(__create_task_state<_Res(_ArgTypes...)>( - std::forward<_Fn>(__fn), __a)) + std::forward<_Fn>(__fn), __a)) { } ~packaged_task() diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index 61861b58520..13acd6a3091 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -104,6 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2097. packaged_task constructors should be constrained + // 3039. Unnecessary decay in thread and packaged_task template using __not_same = __not_, thread>>; -- 2.30.2