Although the issue of Microsoft having chosen, by the agency of its so-called "safe string" library, to deprecate large parts of the standard library in general, and
std::copy() in particular, is hardly new, there's still some confusion in the community about what to do about it, and how to work around it if that's what you choose to do.
If, as I do on occasion, you choose not to suppress the warnings (by
ignoring 4996, or by defining
_SCL_SECURE_NO_WARNINGS) but instead want to ignore specifically for
std::copy(), you can do it as follows:
#include <stlsoft/algorithms/std/alt.hpp>
#include <stlsoft/internal/safestr.h>
#if defined(STLSOFT_USING_SAFE_STR_FUNCTIONS) && \ defined(STLSOFT_COMPILER_IS_MSVC)namespace std{ using ::stlsoft::std_copy;# define copy std_copy}#endif // compiler
By all means it's breaking the rules and introducing names into the
std namespace. Nonetheless, we can sleep easy, since, hey, we didn't start the undermining of the standard!
The other problem is that, currently,
stlsoft::std_copy() has no specialisations. It always uses long-hand iteration; no
memcpy()-based block copying for random access iterators to POD types.
I hope you know me well enough by now for this to not need to be said. But it's important enough for me to have to say it explicitly, just in case:
do not use this technique in library headers!