[libcxx-commits] [libcxx] b3d1d1f - [libc++] Remove unnecessary static assertion in allocate_shared
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 14 14:48:03 PST 2020
Author: Louis Dionne
Date: 2020-12-14T17:47:43-05:00
New Revision: b3d1d1f4fff816423ea8c652d8d849aacc4c6ce8
URL: https://github.com/llvm/llvm-project/commit/b3d1d1f4fff816423ea8c652d8d849aacc4c6ce8
DIFF: https://github.com/llvm/llvm-project/commit/b3d1d1f4fff816423ea8c652d8d849aacc4c6ce8.diff
LOG: [libc++] Remove unnecessary static assertion in allocate_shared
Checking that `T` is constructible from `Args...` is technically not
required by the Standard, although any implementation will obviously
error out if that's not satisfied. However, this check is incompatible
with using Allocator construction in the control block (upcoming change
as part of implementing P0674), so I'm removing it now to reduce the
upcoming diff as much as possible.
Differential Revision: https://reviews.llvm.org/D93246
Added:
Modified:
libcxx/include/memory
Removed:
libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.protected.verify.cpp
libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.verify.cpp
################################################################################
diff --git a/libcxx/include/memory b/libcxx/include/memory
index c676cd01c0f5..4167f0140d51 100644
--- a/libcxx/include/memory
+++ b/libcxx/include/memory
@@ -3307,8 +3307,6 @@ template<class _Tp, class _Alloc, class ..._Args, class = _EnableIf<!is_array<_T
_LIBCPP_HIDE_FROM_ABI
shared_ptr<_Tp> allocate_shared(const _Alloc& __a, _Args&& ...__args)
{
- static_assert(is_constructible<_Tp, _Args...>::value,
- "allocate_shared/make_shared: the type is not constructible from the provided arguments");
using _ControlBlock = __shared_ptr_emplace<_Tp, _Alloc>;
using _ControlBlockAllocator = typename __allocator_traits_rebind<_Alloc, _ControlBlock>::type;
__allocation_guard<_ControlBlockAllocator> __guard(__a, 1);
diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.protected.verify.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.protected.verify.cpp
deleted file mode 100644
index fbd7bfa3e8b8..000000000000
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.protected.verify.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// GCC 5 does not evaluate static assertions dependent on a template parameter.
-// UNSUPPORTED: gcc-5
-
-// <memory>
-
-// shared_ptr
-
-// template<class T, class A, class... Args>
-// shared_ptr<T> allocate_shared(const A& a, Args&&... args);
-
-#include <memory>
-
-#include "test_macros.h"
-
-struct S {
-protected:
- S () {}; // ctor is protected
-};
-
-int main(int, char**) {
- typedef std::allocator<S> A;
- A a;
- std::shared_ptr<S> p = std::allocate_shared<S, A>(a); // expected-error at memory:* {{static_assert failed due to requirement 'is_constructible<S>::value}}
-
- return 0;
-}
diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.verify.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.verify.cpp
deleted file mode 100644
index a2b6e9898245..000000000000
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.protected.verify.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// GCC 5 does not evaluate static assertions dependent on a template parameter.
-// UNSUPPORTED: gcc-5
-
-// <memory>
-
-// shared_ptr
-
-// template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args);
-
-#include <memory>
-
-#include "test_macros.h"
-
-struct S {
-protected:
- S () {}; // ctor is protected
-};
-
-int main(int, char**) {
- std::shared_ptr<S> p = std::make_shared<S>(); // expected-error at memory:* {{static_assert failed due to requirement 'is_constructible<S>::value}}
-
- return 0;
-}
More information about the libcxx-commits
mailing list