// PRMS Id: 6000 // Bug: g++ gets confused trying to build up a reference to a cast. class String { protected: char *cp; public: String(char *incp); String(const String &constStringRef); virtual void virtualFn1(void) const {;} }; String::String(char *incp) { cp = incp; } String::String(const String &constStringRef) { // Right here, do an 'info args', and look at the virtual function table // pointer: typically junk! Calling the function through that table could // do anything, since we're really leaping off into the void. This example // goes down with 'SIGBUS', but I've seen 'SIGSEGV' too, and 'SIGILL' is // possible. cp = constStringRef.cp; constStringRef.virtualFn1(); } void foofun(String string) { ; } class Class1 { public: Class1(const String & constStringRef); }; Class1 :: Class1 (const String & constStringRef) { // If instead of calling the function 'foofun()' here, we just assign // 'constStringRef' to a local variable, then the vptr is typically == 0! foofun(String(constStringRef)); } int main(void) { Class1 *class1 = new Class1("Hi!"); }