Re: Exhaustive list of unusable names
Vladimir Marko wrote:
kanze wrote:
"Gene Bushuyev" wrote:
"Frederick Gotham" <fgothamNO@SPAM.com> wrote in message
[...]
We're in trouble with the above code if the STL version of
strlen is a macro.
Standard library is not allowed to redefine standard C
functions as macros.
No, but they are allowed to declare them 'extern "C"'. And
while formally not yet allowed, they usually also declare them
in the global namespace.
According to 17.4.3.1.3/4,
Each name from the Standard C library declared with external
linkage is reserved to the implementation for use as a name with
extern "C" linkage, both in namespace std and in the global
namespace.
So it's perfectly legal for an implementation to declare
extern "C" std::size_t strlen(const char*);
in the global namespace.
Just not in the <c...> headers.
In practice, I think it will be allowed to do so in the <c...>
headers. And in practice, even now, the fact that an
implementation is allowed to declare them as 'extern "C"' means
that in practice, at least at the link level, std::strcpy and
::strcpy refer in fact to the same function.
--
James Kanze GABI Software
Conseils en informatique orient9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S9mard, 78210 St.-Cyr-l'cole, France, +33 (0)1 30 23 00 34
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]