This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-11-05
In 12.2.4.3 [over.ics.rank] , we have
int f(const int *);
int f(int *);
int i;
int j = f(&i); // Calls f(int *)
—end example] or, if not that,
void f(char *);
void f(const char *);
f("abc");
The two conversion sequences differ only in their qualification conversions,
and the destination types are similar. The cv-qualification signature of
"char *", is a proper subset of the cv-qualification signature
of "const char *", so f(char *) is chosen, which is wrong.
The rule should be like the one for conversion to bool — the deprecated
conversion should be worse than another exact match that is not the deprecated
conversion.
Proposed resolution (10/00):
Change 12.2.4.3 [over.ics.rank] bullet 3.1 sub-bullet 3 from
S1 and S2 differ only in their qualification conversion and yield similar types T1 and T2 (7.3.6 [conv.qual] ), respectively, and the cv-qualification signature of type T1 is a proper subset of the cv-qualification signature of type T2.to
S1 and S2 differ only in their qualification conversion and yield similar types T1 and T2 (7.3.6 [conv.qual] ), respectively, and the cv-qualification signature of type T1 is a proper subset of the cv-qualification signature of type T2, and S1 is not the deprecated string literal array-to-pointer conversion (7.3.3 [conv.array] ).