On Wed, Oct 24, 2007 at 04:50:58PM -0500, John Gateley wrote:
> On Wed, 24 Oct 2007 12:37:50 -0700
> "Andrew Pinski" <[EMAIL PROTECTED]> wrote:
>
> > 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.
>
> True, but this relies on "b" being a virtual class.
> The case I had was very simple, purposely so.
>
> While for complex objects, passing them could be a disaster,
> in this case it is a simple clean construction that is useful.
>
> I'm working on porting approximately a million lines
> of code (which also must remain working on the original
> platform), and the pun (using a struct/class containing a
> single data member which is a pointer to char, and not
> containing a vtab) is pervasive throughout. It would be
> really nice if I didn't have to do thousands of changes
> like:
> Format("%s", Object)
> becoming
> Format("%s", (char *)Object));
An alternative might be to define an overload
void Format(const char* format, const Object& obj) {
Format(format, Object.char_member);
}
and likewise for uses that take more arguments.