public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator @ 2024-01-10 12:40 cooky.ykooc922 at gmail dot com 2024-01-10 13:33 ` [Bug c++/113308] " nathanieloshead at gmail dot com ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: cooky.ykooc922 at gmail dot com @ 2024-01-10 12:40 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308 Bug ID: 113308 Summary: derived class doesn't currently allow inherited explicit object member function post increment operator Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: cooky.ykooc922 at gmail dot com Target Milestone: --- With the recent support of explicit object parameter functions, inheriting explicit object member functions from base class seems to work except for post increment operator 'operator++(int)'. struct add_fn { template <typename Self> Self operator++(this Self&& self, int) { auto temp = self; ++self; return temp; } }; struct A : add_fn { int n; A(int n) : n(n) {} A& operator++() { ++n; return *this; } // this doesn't work either: // A& operator++(this A& self) // { // ++self.n; // return self; // } }; int main() { A a { 5 }; ++a; // ok a++; // error: no 'operator++(int)' declared for postfix '++' } godbolt link: https://godbolt.org/z/1h57Thvds ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/113308] derived class doesn't currently allow inherited explicit object member function post increment operator 2024-01-10 12:40 [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator cooky.ykooc922 at gmail dot com @ 2024-01-10 13:33 ` nathanieloshead at gmail dot com 2024-01-10 17:55 ` waffl3x at protonmail dot com ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: nathanieloshead at gmail dot com @ 2024-01-10 13:33 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308 Nathaniel Shead <nathanieloshead at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |nathanieloshead at gmail dot com --- Comment #1 from Nathaniel Shead <nathanieloshead at gmail dot com> --- I believe this is correct behaviour: The definition of `operator++` in the child class hides the `operator++` declared in the base class. Similarly to the following code: struct base { void f(int) {} }; struct d1 : base { void f() {} }; struct d2 : base { using base::f; // explicitly add base::f as an overload void f() {} }; int main() { d1{}.f(10); // error d2{}.f(10); // OK } ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/113308] derived class doesn't currently allow inherited explicit object member function post increment operator 2024-01-10 12:40 [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator cooky.ykooc922 at gmail dot com 2024-01-10 13:33 ` [Bug c++/113308] " nathanieloshead at gmail dot com @ 2024-01-10 17:55 ` waffl3x at protonmail dot com 2024-01-10 18:20 ` waffl3x at protonmail dot com 2024-01-11 21:46 ` redi at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: waffl3x at protonmail dot com @ 2024-01-10 17:55 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308 --- Comment #2 from waffl3x <waffl3x at protonmail dot com> --- (In reply to Nathaniel Shead from comment #1) > I believe this is correct behaviour: The definition of `operator++` in the > child class hides the `operator++` declared in the base class. Similarly to > the following code: > > > struct base { > void f(int) {} > }; > struct d1 : base { > void f() {} > }; > struct d2 : base { > using base::f; // explicitly add base::f as an overload > void f() {} > }; > > int main() { > d1{}.f(10); // error > d2{}.f(10); // OK > } I'm pretty sure Nathaniel is right, https://godbolt.org/z/d4r3dTsqa https://godbolt.org/z/sxz1rcGbb Mind you, clang and msvc's implementations are buggier than mine so I'm not going to say "doesn't work on theirs so it isn't a bug" but I don't think this one is a bug. Thank you for testing my patch though, I do appreciate it. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/113308] derived class doesn't currently allow inherited explicit object member function post increment operator 2024-01-10 12:40 [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator cooky.ykooc922 at gmail dot com 2024-01-10 13:33 ` [Bug c++/113308] " nathanieloshead at gmail dot com 2024-01-10 17:55 ` waffl3x at protonmail dot com @ 2024-01-10 18:20 ` waffl3x at protonmail dot com 2024-01-11 21:46 ` redi at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: waffl3x at protonmail dot com @ 2024-01-10 18:20 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308 --- Comment #3 from waffl3x <waffl3x at protonmail dot com> --- I meant to post this link instead of one of the others. https://godbolt.org/z/oMP8185Yh I guess I shouldn't be replying to things while still waking up, sorry! ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/113308] derived class doesn't currently allow inherited explicit object member function post increment operator 2024-01-10 12:40 [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator cooky.ykooc922 at gmail dot com ` (2 preceding siblings ...) 2024-01-10 18:20 ` waffl3x at protonmail dot com @ 2024-01-11 21:46 ` redi at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: redi at gcc dot gnu.org @ 2024-01-11 21:46 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113308 Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- Yes, I think gcc is correct here. Explicit object functions aren't immune to name hiding. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-01-11 21:46 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-01-10 12:40 [Bug c++/113308] New: derived class doesn't currently allow inherited explicit object member function post increment operator cooky.ykooc922 at gmail dot com 2024-01-10 13:33 ` [Bug c++/113308] " nathanieloshead at gmail dot com 2024-01-10 17:55 ` waffl3x at protonmail dot com 2024-01-10 18:20 ` waffl3x at protonmail dot com 2024-01-11 21:46 ` redi at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).