diff --git a/libcxx/docs/Status/Cxx2cIssues.csv b/libcxx/docs/Status/Cxx2cIssues.csv index 28359b7bb49ac4..8d24457186310c 100644 --- a/libcxx/docs/Status/Cxx2cIssues.csv +++ b/libcxx/docs/Status/Cxx2cIssues.csv @@ -65,5 +65,4 @@ "`3343 `__","Ordering of calls to ``unlock()`` and ``notify_all()`` in Effects element of ``notify_all_at_thread_exit()`` should be reversed","Not Yet Adopted","|Complete|","16.0","" "XXXX","","The sys_info range should be affected by save","Not Yet Adopted","|Complete|","19.0" "`4071 `__","","``reference_wrapper`` comparisons are not SFINAE-friendly","Not Yet Adopted","|Complete|","19.0" -"`4110 `__","","``shared_ptr(nullptr_t, Deleter)`` is overconstrained, breaking some sensible deleters","Not Yet Adopted","|Complete|","19.0" "","","","","","" diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h index 7b5002cb95d32b..00db96185be7c6 100644 --- a/libcxx/include/__memory/shared_ptr.h +++ b/libcxx/include/__memory/shared_ptr.h @@ -404,7 +404,7 @@ struct __shared_ptr_deleter_ctor_reqs { }; template -using __shared_ptr_nullptr_deleter_ctor_reqs = _And, __well_formed_deleter<_Dp, _Tp*> >; +using __shared_ptr_nullptr_deleter_ctor_reqs = _And, __well_formed_deleter<_Dp, nullptr_t> >; #if defined(_LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI) # define _LIBCPP_SHARED_PTR_TRIVIAL_ABI __attribute__((__trivial_abi__)) diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp index 4ea752b36bd018..13340ed5294c05 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp @@ -32,16 +32,17 @@ int A::count = 0; // LWG 3233. Broken requirements for shared_ptr converting constructors // https://cplusplus.github.io/LWG/issue3233 static_assert( std::is_constructible, std::nullptr_t, test_deleter >::value, ""); -static_assert(!std::is_constructible, std::nullptr_t, bad_deleter>::value, ""); +static_assert(!std::is_constructible, std::nullptr_t, bad_deleter>::value, ""); +static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter>::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter>::value, ""); #if TEST_STD_VER >= 17 -static_assert(std::is_constructible, std::nullptr_t, test_deleter >::value, ""); +static_assert( std::is_constructible, std::nullptr_t, test_deleter >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, bad_deleter>::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter>::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter>::value, ""); -static_assert(std::is_constructible, std::nullptr_t, test_deleter >::value, ""); +static_assert( std::is_constructible, std::nullptr_t, test_deleter >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, bad_deleter>::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter>::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter>::value, ""); diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp index a479b24c4595ab..53ca6fb5b234d4 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp @@ -33,21 +33,17 @@ int A::count = 0; // LWG 3233. Broken requirements for shared_ptr converting constructors // https://cplusplus.github.io/LWG/issue3233 static_assert( std::is_constructible, std::nullptr_t, test_deleter, test_allocator >::value, ""); -static_assert(!std::is_constructible, std::nullptr_t, bad_deleter, test_allocator >::value, - ""); +static_assert(!std::is_constructible, std::nullptr_t, bad_deleter, test_allocator >::value, ""); +static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter, test_allocator >::value, ""); #if TEST_STD_VER >= 17 -static_assert( - std::is_constructible, std::nullptr_t, test_deleter, test_allocator >::value, - ""); +static_assert( std::is_constructible, std::nullptr_t, test_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, bad_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter, test_allocator >::value, ""); -static_assert( - std::is_constructible, std::nullptr_t, test_deleter, test_allocator >::value, - ""); +static_assert( std::is_constructible, std::nullptr_t, test_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, bad_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_nullptr_deleter, test_allocator >::value, ""); static_assert(!std::is_constructible, std::nullptr_t, no_move_deleter, test_allocator >::value, ""); diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp index 95dcb92b51993c..562acf56d96fe1 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp @@ -115,14 +115,6 @@ int main(int, char**) } #endif // TEST_STD_VER >= 11 -#if TEST_STD_VER >= 14 - { - // LWG 4110 - auto deleter = [](auto pointer) { delete pointer; }; - std::shared_ptr p(new int, deleter); - } -#endif - test_function_type(); return 0; } diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp index 89e7d0b02d421b..9dffbcdd59a735 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp @@ -165,13 +165,5 @@ int main(int, char**) test_allocator >::value, ""); } -#if TEST_STD_VER >= 14 - { - // LWG 4110 - auto deleter = [](auto pointer) { delete pointer; }; - std::shared_ptr p(new int, deleter, std::allocator()); - } -#endif - return 0; }