diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 88fc5b9ca93de9af11dcc02fd8d68911f789f3a9..5bf87ca6c83ebacf7d5ec51b66e5dd48dce53f5a 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -22,7 +22,26 @@ #include <@KWSYS_NAMESPACE@/Configure.h> #include <sys/types.h> + +// Required for va_list #include <stdarg.h> +#ifndef va_list +// Some compilers move va_list into the std:: namespace and there is no way to +// tell that this has been done. Playing with things being included before or +// after stdarg.h does not solve things because we do not have control over +// what the user does. This hack solves this problem by moving va_list to our +// own namespace that is local for kwsys. +namespace std {} // Required for platforms that do not have std:: +namespace @KWSYS_NAMESPACE@_VA_LIST +{ + using namespace std; + typedef va_list hack_va_list; +} +namespace @KWSYS_NAMESPACE@ +{ + typedef @KWSYS_NAMESPACE@_VA_LIST::hack_va_list va_list; +} +#endif // va_list #if defined( _MSC_VER ) typedef unsigned short mode_t;