-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc++] Address post-commit comments for __scope_guard #116291
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
__other.__moved_from_ = true; | ||
} | ||
private: | ||
__scope_guard(__scope_guard&&); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure whether this approach is better than having dead code. @ldionne thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, I like this a lot better than the previous approach. There's not much harm in providing this private declaration.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Uh... this actually has to be public. Sometimes my brain just turns off. Does that change your thoughts on this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It doesn't, but thanks for checking.
✅ With the latest revision this PR passed the C/C++ code formatter. |
__other.__moved_from_ = true; | ||
} | ||
private: | ||
__scope_guard(__scope_guard&&); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, I like this a lot better than the previous approach. There's not much harm in providing this private declaration.
a91e0de
to
8710b85
Compare
@llvm/pr-subscribers-libcxx Author: Nikolas Klauser (philnik777) ChangesFixes #116204 Full diff: https://github.com/llvm/llvm-project/pull/116291.diff 1 Files Affected:
diff --git a/libcxx/include/__utility/scope_guard.h b/libcxx/include/__utility/scope_guard.h
index 133e54212ed592..e51b300d1f50c7 100644
--- a/libcxx/include/__utility/scope_guard.h
+++ b/libcxx/include/__utility/scope_guard.h
@@ -26,26 +26,22 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Func>
class __scope_guard {
_Func __func_;
- bool __moved_from_;
public:
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR __scope_guard(_Func __func) : __func_(std::move(__func)) {}
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit __scope_guard(_Func __func) : __func_(std::move(__func)) {}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 ~__scope_guard() { __func_(); }
- __scope_guard(const __scope_guard&) = delete;
+ __scope_guard(const __scope_guard&) = delete;
+ __scope_guard& operator=(const __scope_guard&) = delete;
+ __scope_guard& operator=(__scope_guard&&) = delete;
-// C++17 has mandatory RVO, so we don't need the move constructor anymore to make __make_scope_guard work.
+// C++14 doesn't have mandatory RVO, so we have to provide a declaration even though no compiler will ever generate
+// a call to the move constructor.
#if _LIBCPP_STD_VER <= 14
- __scope_guard(__scope_guard&& __other) : __func_(__other.__func_) {
- _LIBCPP_ASSERT_INTERNAL(!__other.__moved_from_, "Cannot move twice from __scope_guard");
- __other.__moved_from_ = true;
- }
+ __scope_guard(__scope_guard&&);
#else
__scope_guard(__scope_guard&&) = delete;
#endif
-
- __scope_guard& operator=(const __scope_guard&) = delete;
- __scope_guard& operator=(__scope_guard&&) = delete;
};
template <class _Func>
|
8710b85
to
9162a32
Compare
Fixes #116204