From 8aa2266fd8dd237c84daf12c2eec0df244558f49 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Tue, 12 May 2020 18:56:18 -0700 Subject: [PATCH] [libcxx] Constrain function assignment operator (2574). This patch fixes LWG issue 2574. Differential Review: https://reviews.llvm.org/D62928 --- libcxx/include/functional | 2 +- .../func.wrap.func.con/F_assign.pass.cpp | 20 +++++++++++++++++++ libcxx/www/cxx1z_status.html | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libcxx/include/functional b/libcxx/include/functional index fa55864bc5d65..9d15485839304 100644 --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -2387,7 +2387,7 @@ public: function& operator=(const function&); function& operator=(function&&) _NOEXCEPT; function& operator=(nullptr_t) _NOEXCEPT; - template> + template::type>> function& operator=(_Fp&&); ~function(); diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp index a2458414b0487..4fc7bcfc48710 100644 --- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp @@ -118,6 +118,26 @@ int main(int, char**) static_assert(!std::is_assignable::value, ""); static_assert(!std::is_assignable::value, ""); } + { + using Fn = std::function; + static_assert(std::is_assignable::value, ""); + } + { + using F1 = std::function; + using F2 = std::function; + static_assert(!std::is_assignable::value, ""); + } + { + using F1 = std::function; + using F2 = std::function; + static_assert(!std::is_assignable::value, ""); + static_assert(!std::is_assignable::value, ""); + } + { + using F1 = std::function; + using F2 = std::function; + static_assert(!std::is_assignable::value, ""); + } #endif return 0; diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html index 83aedb96bdb75..c8b3374ba42e9 100644 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -299,7 +299,7 @@

Library Working group Issues Status

2566Requirements on the first template parameter of container adaptorsJacksonvilleComplete 2571§[map.modifiers]/2 imposes nonsensical requirement on insert(InputIterator, InputIterator)JacksonvilleComplete 2572The remarks for shared_ptr::operator* should apply to cv-qualified void as wellJacksonvilleComplete - 2574[fund.ts.v2] std::experimental::function::operator=(F&&) should be constrainedJacksonville + 2574[fund.ts.v2] std::experimental::function::operator=(F&&) should be constrainedJacksonvilleComplete 2575[fund.ts.v2] experimental::function::assign should be removedJacksonville 2576istream_iterator and ostream_iterator should use std::addressofJacksonvilleComplete 2577{shared,unique}_lock should use std::addressofJacksonvilleComplete