From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id F152F3947411; Wed, 14 Apr 2021 16:41:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F152F3947411 From: "redi 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 16:41:44 +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: redi 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: 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 16:41:45 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D100070 --- Comment #7 from Jonathan Wakely --- Note to self/Patrick: Measure whether it helps to specialize transform_view's iterator so that wh= en _Base_iter is __normal_iterator we unwrap it and store a raw pointer. Also, I suspect the indirections in return std::__invoke(*_M_parent->_M_fun, *_M_current); are making the optimizer give up. 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 f= or a function pointer and store a function pointer (i.e. decay_t) directly. = That would have the same syntax (i.e. operator*) to access it as the semi-regular box, but would be less abstraction to un-abstract. And maybe store a function pointer directly in the transform_view iterator,= so we don't need to go to the parent to get it on every dereference. Barry pointed out that range-v3 elides the use of semi-regular box for some cases, and he confirmed that storing a function pointer in the iterator hel= ps.=