[gnu.g++.bug] Un-initialized return Strings

T.Day@CS.UCL.AC.UK (Tim Day) (05/10/89)

I am rather confused by the following...

Most of the time, a String() seems to be the equivalent of a String(""),
(as I'd expect), but in the below code attempting to output an unitialized
String returned from a function as a String causes a segmentation fault,
which weird since normally uninitialised Strings, and functions returning
Strings, work fine. It also seems odd that returning a StrTmp should fix
the problem. (As will always declaring 
	String bleah;
as 
	String bleah("");
)

------------------------------
#include <stream.h>
#include <String.h>

String hot()		// Returning un-init. String as String bombs
{	String bleah;
	return bleah;
}

StrTmp digital()	// ..but returning it as StrTmp is OK
{	String bleah;
	return bleah;
}

String dog()		// ..as is returning it as String, once loaded 
{	String bleah;
	bleah=String("WOOF");
	return bleah;
}

main()
{	if (String() == String(""))
		cerr << "Uninitialised string == empty string\n";
	if (String() != String(""))
		cerr << "Uninitialised string != empty string\n";

	cerr << "'" << String("") << "'\n";	// OK
	cerr << "'" << String()   << "'\n";	// OK
	cerr << "'" << dog()      << "'\n";	// OK
	cerr << "'" << digital()  << "'\n";     // OK
	cerr << "'" << hot()      << "'\n";     // Ouch!

	exit(0);
}
-------------------------------

Tim