On 10/24/07, Joe Buck <[EMAIL PROTECTED]> wrote:
> So GCC could support this case and treat the warning as a pedwarn.

Well pedwarn is wrong as the code is just undefined at runtime (not at
compile time), pedwarn is for errors when the error is very pedantic.

Also he wants to do printf("%s", struct_containing_charptr);  which is
undefined at that point anyways.  Even for PODs.  He will get a
warning with -Wformat about that being undefined.  Yes we follow the
IA64 C++ ABI but we also want people to produce portable code.  You
never know some future GCC supports a different C++ ABI which says the
layout is different and then someone goes and tries to do this and
they get the incorrect result.  This is the idea of the warning here
really.  If you do:

struct b : String
{
 virtual void f();
};

struct b c;

void g(char*, ...);

void f(void)
{
  g("%s", c);
}

What exactly does that mean?  Do we pass it as a String or as a "b"?
This is the reason why non-POD through variable arguments is
undefined.

Thanks,
Andrew Pinski

Reply via email to