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.