[comp.lang.c++] Typechecking types different from immediate type.

mark@lznv.ATT.COM (MARK SMITH) (12/29/87)

Here's an interesting consequence of implicit initialization in C++:

We intend the following:

class A {
	int i;
public:
	A( int newi )	{ i = newi; }
};

main()
{
	A abc( 0 );
	extern F( &A );
	// ...
	{
		F( abc );
	}
}

This works fine...but if our program has a bug 
(in my case, left over from an earlier version) 
that accidentally renames abc in the inner scope:

main()
{
	A abc( 0 );
	extern F( &A );
	// ...
	{
		int abc = 1;
		F( abc );
	}
}

C++ is happy to convert the int abc into an A for us.
Compile typechecking doesn't prevent this type of pilot error.
Generally, for each type T there is an associated 
typechecking type T', decidedly *not* T, defined as a union of types 
T' = { T, t1, t2, ... } where constructors T( t1 ), T( t2 ), ...
have been defined.

Mark Smith lznv!mark