[comp.std.c++] Argument Matching

hitz@csi.uottawa.ca (Martin Hitz) (06/26/91)

I have been looking for an example for the usefulness of the
"strictly better match" rule in the context of overloading resolution.
The ARM gives one on pages 314-315 (section 13.2), however, I am wondering
if it was possible to rewrite it in a "class-free" manner.

I came up with the following:

	int f(void*, void*);		// =: 1
	int f(const int*, int*);	// =: 2
	int f(int *, const int*);	// =: 3

	int i = f(0,0);
	
The best match sets are {1,3} for the first, and {1,2} for the second argument.
The intersection is {1} (unique), however, 1 is NOT a strictly better match
than 2 (therefore, the call is illegal), because (comparing 1 to 2):

	0 -> void*	is considered equal to		0 -> const int*	
	0 -> void*	is considered equal to		0 -> int*	
	
although

	0 -> int*	is considered BETTER to		0 -> const int*	
	
during the first step (computation of "best" match sets).

I have two questions:

1) Is the example valid?

if yes:	2a) Is the argumentation correct?
if no:	2b) Is there a valid "class-free" example?

Thank you!

	Martin Hitz@csi.uottawa.ca