Skip to content

Commit 4ce1313

Browse files
committed
init only for __libcpp_is_constant_evaluated
1 parent 7cacaad commit 4ce1313

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

libcxx/include/__utility/no_destroy.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ struct __uninitialized_tag {};
3030
// initialization using __emplace.
3131
template <class _Tp>
3232
struct __no_destroy {
33-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit __no_destroy(__uninitialized_tag) : __obj_() {}
33+
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit __no_destroy(__uninitialized_tag) {
34+
if (__libcpp_is_constant_evaluated()) {
35+
for (size_t __i = 0; __i != sizeof(__obj_); ++__i)
36+
std::construct_at(__obj_ + __i);
37+
}
38+
}
3439

3540
template <class... _Args>
3641
_LIBCPP_HIDE_FROM_ABI explicit __no_destroy(_Args&&... __args) {

0 commit comments

Comments
 (0)