-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
<generator>
: Mark strengthened noexcept (plus tiny drive-by changes)
#4351
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -210,7 +210,7 @@ public: | |
} | ||
|
||
_NODISCARD auto yield_value(const remove_reference_t<_Yielded>& _Val) noexcept( | ||
is_nothrow_constructible_v<remove_cvref_t<_Yielded>, const remove_reference_t<_Yielded>&>) | ||
is_nothrow_constructible_v<remove_cvref_t<_Yielded>, const remove_reference_t<_Yielded>&>) /* strengthened */ | ||
requires (is_rvalue_reference_v<_Yielded> | ||
&& constructible_from<remove_cvref_t<_Yielded>, const remove_reference_t<_Yielded>&>) | ||
{ | ||
|
@@ -225,7 +225,7 @@ public: | |
|
||
template <_RANGES input_range _Rng, class _Alloc> | ||
requires convertible_to<_RANGES range_reference_t<_Rng>, _Yielded> | ||
_NODISCARD auto yield_value(_RANGES elements_of<_Rng, _Alloc> _Elem) noexcept { | ||
_NODISCARD auto yield_value(_RANGES elements_of<_Rng, _Alloc> _Elem) { | ||
using _Vty = _RANGES range_value_t<_Rng>; | ||
return _Nested_awaitable<_Yielded, _Vty, _Alloc>{ | ||
[](allocator_arg_t, _Alloc, _RANGES iterator_t<_Rng> _It, | ||
|
@@ -238,7 +238,7 @@ public: | |
|
||
void await_transform() = delete; | ||
|
||
void return_void() noexcept {} | ||
void return_void() const noexcept {} | ||
|
||
void unhandled_exception() { | ||
if (_Info) { | ||
|
@@ -362,7 +362,7 @@ public: | |
return *this; | ||
} | ||
|
||
_NODISCARD _Ref operator*() const noexcept { | ||
_NODISCARD _Ref operator*() const noexcept(is_nothrow_copy_constructible_v<_Ref>) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is constructing, but IIRC not necessarily copy constructing, a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the condition needs to be If The standard says There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On further thought, I believe the logic here is "If What we've merged here is correct, but we should nonetheless change it in a followup to obviously agree with the Standard wording. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
In this case, the function does not throw, but
So I believe that we should not follow the standard wording. We need to fix it. |
||
_STL_ASSERT(!_Coro.done(), "Can't dereference generator end iterator"); | ||
return static_cast<_Ref>(*_Coro.promise()._Top.promise()._Ptr); | ||
} | ||
|
@@ -377,8 +377,9 @@ public: | |
++*this; | ||
} | ||
|
||
_NODISCARD bool operator==(default_sentinel_t) const noexcept { | ||
return _Coro.done(); | ||
_NODISCARD_FRIEND bool operator==(const _Gen_iter& _It, default_sentinel_t) noexcept /* strengthened */ | ||
{ | ||
Comment on lines
+380
to
+381
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Another stylistic nitpick: There's enough room for the brace here to be attached; clang-format exhibits "sticky" behavior and will preserve it. Also not worth resetting testing for this PR. |
||
return _It._Coro.done(); | ||
} | ||
|
||
private: | ||
|
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.
Stylistic nitpick: We use
/* strengthened */
when it's embedded in a line (especially before an opening brace), but the followingrequires
will always be clang-formatted on a new line, so this should ideally be a C++ comment// strengthened
. Not worth resetting testing though.