-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Description
Discovered while dealing with #4389.
The use of _Fake_copy_init here (determining whether the implicit coversion is non-throwing) looks superfluous.
Lines 3911 to 3912 in bd3d740
| noexcept(_Fake_copy_init<bool>( | |
| _Left._Outer == _Right._Outer && _Left._Inner == _Right._Inner))) /* strengthened */ |
In this place:
- The type of
_Left._Outerand_Right._Outermodelsforward_iterator(definition can be found here), and thusdecltype(_Left._Outer == _Right._Outer)should already modelboolean-testable, and _Left._Innerand_Right._Innerare_Defaultaboxes (definition can be found here) for whichoperator==always returnsbool([1], [2]).
As indicated by the use of boolean-testable, the && operator in _Left._Outer == _Right._Outer && _Left._Inner == _Right._Inner should always has the built-in meaning and thus the result should always be a bool prvalue. Otherwise, the program is already ill-formed, possibly no diagnostic required.
So, I think we can directly use noexcept(_Left._Outer == _Right._Outer && _Left._Inner == _Right._Inner) instead, which possibly slightly improves compiler throughput.
This issue is intended for a new contributor (especially one new to GitHub) to get started with a simple change.
Please feel free to submit a pull request if there isn't one already linked here - no need to ask for permission! 😸
You can (and should) link your pull request to this issue using GitHub's close/fix/resolve syntax.
(in the PR description not the commit message)