From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 0AA3339730EF; Wed, 14 Apr 2021 17:34:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0AA3339730EF From: "ppalka at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug libstdc++/100070] Standard library container iterator-pair constructors should check C++20 iterator concepts Date: Wed, 14 Apr 2021 17:34:17 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libstdc++ X-Bugzilla-Version: 10.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: ppalka at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Apr 2021 17:34:18 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D100070 Patrick Palka changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ppalka at gcc dot gnu.org --- Comment #8 from Patrick Palka --- (In reply to Jonathan Wakely from comment #7) > Note to self/Patrick: >=20 > Measure whether it helps to specialize transform_view's iterator so that > when _Base_iter is __normal_iterator we unwrap it and store a raw pointer. >=20 > Also, I suspect the indirections in >=20 > return std::__invoke(*_M_parent->_M_fun, *_M_current); >=20 > are making the optimizer give up. >=20 > We have an indirection to the parent to access the semi-regular box, which > has its own indirections. Maybe we could just get rid of the semi-regular > box for a function pointer and store a function pointer (i.e. decay_t) > directly. >=20 > And maybe store a function pointer directly in the transform_view iterato= r, > so we don't need to go to the parent to get it on every dereference. Makes sense to me. I think we could then get rid of the iterator's _M_pare= nt data member since it's used only to access the transformation function. And doing so would also reduce the size of the iterator in the case where the transformation function is an empty functor (and so [[no_unique_address]] c= ould optimize away its storage). >=20 > Barry pointed out that range-v3 elides the use of semi-regular box for so= me > cases, and he confirmed that storing a function pointer in the iterator > helps. FWIW we already elide the semiregular box for types which are semiregular, = via a partial specialization of __box that is just a [[no_unique_wrapper]] for = the underlying semiregular type.=