>>> Nathan Sidwell <[EMAIL PROTECTED]> 07.12.05 17:22:10 >>>
>Jan Beulich wrote:
>
>> And that is precisely the reason why I think binding a reference to
the
>> whole object or any of its members, when the object itself is a
member
>> of a packed object, is illegal, hence requiring a diagnostic
(unless,
>> like for both other cases, the default is to pack structures).
>
>Doing that will break
>       struct Foo { void operator=(Foo const &);};
>       struct Baz __attribute__((packed))
>       {
>         char c;
>         Foo m;
>       }
>
>       void Bar (Baz *ptr)
>       {
>         ptr->m = something;
>       }
>This is something we need to make work.

Why? It's broken. You just cannot embed something that requires
alignment into something that doesn't guarantee alignment, except that
for built-in types, the compiler can synthesize the necessary splitting,
but Foo's assignment operator, in your example, may be totally unaware
that it might get called with an unaligned object.

>>>If your system packs structs by default, you should not be getting
the
>> 
>> warning 
>> 
>>>on any of the uses.
>> 
>> 
>> But I do, and if I use a native Linux compiler with -fpack-struct,
I
>> also get it (along with a second one on one of the two other
>> instances).
>
>Then I think you have a bug.

Of course I can enter this in bugzilla, but things like that (in my
experience) will likely never get addressed, so it seems a little
pointless...

Jan

Reply via email to