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).