Thanks to visit codestin.com
Credit goes to github.com

Skip to content

<ranges>: Drop one superfluous _Fake_copy_init<bool> where the argument type is always bool #4394

@frederick-vs-ja

Description

@frederick-vs-ja

Discovered while dealing with #4389.

The use of _Fake_copy_init here (determining whether the implicit coversion is non-throwing) looks superfluous.

STL/stl/inc/ranges

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._Outer and _Right._Outer models forward_iterator (definition can be found here), and thus decltype(_Left._Outer == _Right._Outer) should already model boolean-testable, and
  • _Left._Inner and _Right._Inner are _Defaultaboxes (definition can be found here) for which operator== always returns bool ([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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    fixedSomething works now, yay!good first issueGood for newcomersthroughputMust compile faster

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions