Query regarding unusual behaviour for tail padding with different c++ standards
Jonathan Wakely
jwakely.gcc@gmail.com
Mon Dec 13 10:34:57 GMT 2021
On Mon, 13 Dec 2021 at 05:14, Andrew Pinski wrote:
>
> On Sun, Dec 12, 2021 at 9:04 PM Nayan Deshmukh via Gcc <gcc@gcc.gnu.org> wrote:
> > #include <iostream>
> > #include <stdint.h>
> > #include <cstddef>
> > struct A {
> > int a;
> > uint64_t b;
> > int c = -1;
> > };
>
> The question becomes is the above a standard layout class or not. I
> Noticed clang does not change the rules for layout between C++11 and
> C++14 but GCC does.
> I don't know the exact rules in the ABI to help you there but I do
> think you should file a bug because it definitely looks unexpected
> really.
The C++14 behaviour started with https://gcc.gnu.org/r216750
Implement N3653 (Member initializers and aggregates) and fix
references to 'this' in constexpr cons
tructors.
Implement N3653 (Member initializers and aggregates) and fix
references to 'this' in constexpr constructors.
* class.c (check_field_decls): In C++14 an NSDMI does not make the
class non-aggregate.
But I think the layout should be using "POD for the purpose of
layout", which means the C++98 POD rules. Please do report it to
bugzilla.
More information about the Gcc
mailing list