public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field
@ 2021-09-04 14:07 pinskia at gcc dot gnu.org
2021-09-04 17:01 ` [Bug c++/102201] " harald at gigawatt dot nl
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-04 14:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102201
Bug ID: 102201
Summary: Accepts invalid C++98 with nested class and sizeof of
outer's non-static field
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: accepts-invalid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Target Milestone: ---
Take:
struct outer {
struct inner {
inner() :x(sizeof(y)) { }
unsigned int x;
};
int y;
};
----- CUT ----
The above code is valid C++11 but invalid C++98 because the field y is
non-static.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/102201] Accepts invalid C++98 with nested class and sizeof of outer's non-static field
2021-09-04 14:07 [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field pinskia at gcc dot gnu.org
@ 2021-09-04 17:01 ` harald at gigawatt dot nl
2021-09-06 16:03 ` redi at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: harald at gigawatt dot nl @ 2021-09-04 17:01 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102201
Harald van Dijk <harald at gigawatt dot nl> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |harald at gigawatt dot nl
--- Comment #1 from Harald van Dijk <harald at gigawatt dot nl> ---
This doesn't need inner classes, a simpler reproducer is:
struct S { int i; };
int j = sizeof S::i;
gcc accepts this in all modes ever since the C++11 rule for non-static members
in unevaluated contexts was implemented (4.4). clang says in C++98 mode:
test.cc:2:19: error: invalid use of non-static data member 'i'
int j = sizeof S::i;
~~~^
1 error generated.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/102201] Accepts invalid C++98 with nested class and sizeof of outer's non-static field
2021-09-04 14:07 [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field pinskia at gcc dot gnu.org
2021-09-04 17:01 ` [Bug c++/102201] " harald at gigawatt dot nl
@ 2021-09-06 16:03 ` redi at gcc dot gnu.org
2021-09-06 18:42 ` pinskia at gcc dot gnu.org
2021-09-08 8:20 ` redi at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2021-09-06 16:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102201
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jason at gcc dot gnu.org
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
It's accepted since:
C++ DR 613
C++ DR 613
* semantics.c (finish_non_static_data_member): Allow such
references
without an associated object in sizeof/decltype/alignof.
From-SVN: r145375
(and SVN r145620 on the gcc-4.4 branch).
Presumably treating it as a DR was intentional.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/102201] Accepts invalid C++98 with nested class and sizeof of outer's non-static field
2021-09-04 14:07 [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field pinskia at gcc dot gnu.org
2021-09-04 17:01 ` [Bug c++/102201] " harald at gigawatt dot nl
2021-09-06 16:03 ` redi at gcc dot gnu.org
@ 2021-09-06 18:42 ` pinskia at gcc dot gnu.org
2021-09-08 8:20 ` redi at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-06 18:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102201
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |WONTFIX
Status|UNCONFIRMED |RESOLVED
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
DR613 is CD1 so yes it is included in C++98/C++03. clang must have decided
CD1's are not included ...
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/102201] Accepts invalid C++98 with nested class and sizeof of outer's non-static field
2021-09-04 14:07 [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field pinskia at gcc dot gnu.org
` (2 preceding siblings ...)
2021-09-06 18:42 ` pinskia at gcc dot gnu.org
@ 2021-09-08 8:20 ` redi at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2021-09-08 8:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102201
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
CD1 was a C++0x draft:
"CD1: A DR issue not resolved in TC1 but included in Committee Draft 1. CD1 was
advanced for balloting at the September, 2008 WG21 meeting."
DR 613 was resolved by N2253, which was a post-C++03 change, and wasn't adopted
as a defect report. So arguably Clang is right to reject it in C++03 mode.
We could make it a pedwarn, but I think WONTFIX is probably right. There seems
to be no advantage to rejecting it (strictly conforming C++98 programs aren't
going to be using SFINAE tricks that could detect this).
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-09-08 8:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-04 14:07 [Bug c++/102201] New: Accepts invalid C++98 with nested class and sizeof of outer's non-static field pinskia at gcc dot gnu.org
2021-09-04 17:01 ` [Bug c++/102201] " harald at gigawatt dot nl
2021-09-06 16:03 ` redi at gcc dot gnu.org
2021-09-06 18:42 ` pinskia at gcc dot gnu.org
2021-09-08 8:20 ` 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).