> -----Original Message----- > From: Martin Sebor [mailto:[EMAIL PROTECTED] On Behalf Of Martin Sebor > Sent: Wednesday, June 13, 2007 6:36 AM > To: stdcxx-dev@incubator.apache.org > Subject: Re: MSVC8 CRT "Secure Template Overloads" feature and stdcxx > > Farid Zaripov wrote: > > The MSVC8 CRT have the following feature: all functions, working > > with sting buffers (i.e. strcpy, strcat, sprintf, ...) have the > > security-enhanced versions with suffix "_s" > > (i.e. strcpy_s, strcat_s, sprintf_s, ...). And if #defined macro > > _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 > > then will be defined template overloads of the such functions, i.e.: > > So the templates are disabled by default, correct? And to > enable them users would have to define the macro, both during > configuration as well as while building and using the library.
Correct. > > The proposed patch is attached, but I not sure about passing 0 as > > va_list argument while testing vsprintf() and vswprintf(). > > I don't think that's guaranteed to be well-formed. va_list > could be anything, including a struct with no conversion from > int. But if you can get this issue resolved and if it > compiles with all your compilers (i.e., all versions of MSVC > and Intel C++ on Windows, as well as gcc on Linux and > Cygwin), I think it should be safe to commit the change. Since va_list can be anything, we need to pass va_list type in function call. We can add function template <class T> get_t () { T t; return t; } to the libc_decl.sh and use the followinf declaration: vsprintf((char*)0,0,get_t<va_list>()) in headers.inc. The proposed patch of the libc_decl.sh: Index: libc_decl.sh =================================================================== --- libc_decl.sh (revision 546575) +++ libc_decl.sh (working copy) @@ -227,6 +227,15 @@ # endif // no_namespace +#include <stdarg.h> + +template <class T> +T get_t () +{ + T t; + return t; +} + int main (int argc, char**) { // with gcc, prevent intrinsics from causing false positives Farid.