diff --git a/libcxx/include/functional b/libcxx/include/functional --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -2304,7 +2304,7 @@ 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 --- 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 @@ -114,6 +114,26 @@ 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 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -299,7 +299,7 @@ 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