Section: 22.10.8 [comparisons] Status: CD1 Submitter: Martin Sebor Opened: 2000-12-26 Last modified: 2016-01-28
Priority: Not Prioritized
View other active issues in [comparisons].
View all other issues in [comparisons].
View all issues with CD1 status.
Discussion:
The example in 22.10.8 [comparisons], p6 shows how to use the C
library function strcmp()
with the function pointer adapter
ptr_fun()
. But since it's unspecified whether the C library
functions have extern "C"
or extern
"C++"
linkage [16.4.3.3 [using.linkage]], and since
function pointers with different the language linkage specifications
(9.11 [dcl.link]) are incompatible, whether this example is
well-formed is unspecified.
Proposed resolution:
Change 22.10.8 [comparisons] paragraph 6 from:
[Example:
replace_if(v.begin(), v.end(), not1(bind2nd(ptr_fun(strcmp), "C")), "C++");replaces each
C
withC++
in sequencev
.
to:
[Example:
int compare(const char*, const char*); replace_if(v.begin(), v.end(), not1(bind2nd(ptr_fun(compare), "abc")), "def");replaces each
abc
withdef
in sequencev
.
Also, remove footnote 215 in that same paragraph.
[Copenhagen: Minor change in the proposed resolution. Since this issue deals in part with C and C++ linkage, it was believed to be too confusing for the strings in the example to be "C" and "C++". ]
[Redmond: More minor changes. Got rid of the footnote (which seems to make a sweeping normative requirement, even though footnotes aren't normative), and changed the sentence after the footnote so that it corresponds to the new code fragment.]