* Author: Julian Smart and others
* Modified by: Ryan Norton (Converted to C)
* Created: 01/02/97
- * RCS-ID: $Id$
* Copyright: (c) Julian Smart
* Licence: wxWindows licence
*/
#endif
#endif
-#ifndef HAVE_TYPE_TRAITS
- #if defined(__has_include) && __has_include(<type_traits>)
- #define HAVE_TYPE_TRAITS
+#ifndef HAVE_TR1_TYPE_TRAITS
+ #if defined(__VISUALC__) && (_MSC_FULL_VER >= 150030729)
+ #define HAVE_TR1_TYPE_TRAITS
#endif
#endif
-#ifndef HAVE_TR1_TYPE_TRAITS
- #if defined(__has_include) && __has_include(<tr1/type_traits>)
- #define HAVE_TR1_TYPE_TRAITS
+#if defined(__has_include)
+ #if !defined(HAVE_TYPE_TRAITS) && __has_include(<type_traits>)
+ #define HAVE_TYPE_TRAITS
#endif
- #elif defined(__VISUALC__) && (_MSC_FULL_VER >= 150030729)
+
+ #if !defined(HAVE_TR1_TYPE_TRAITS) && __has_include(<tr1/type_traits>)
#define HAVE_TR1_TYPE_TRAITS
#endif
-#endif
-#ifndef HAVE_STD_UNORDERED_MAP
- #if defined(__has_include) && __has_include(<unordered_map>)
+ #if !defined(HAVE_STD_UNORDERED_MAP) && __has_include(<unordered_map>)
#define HAVE_STD_UNORDERED_MAP
#endif
-#endif
-#ifndef HAVE_TR1_UNORDERED_MAP
- #if defined(__has_include) && __has_include(<tr1/unordered_map>)
+ #if !defined(HAVE_TR1_UNORDERED_MAP) && __has_include(<tr1/unordered_map>)
#define HAVE_TR1_UNORDERED_MAP
#endif
-#endif
-#ifndef HAVE_STD_UNORDERED_SET
- #if defined(__has_include) && __has_include(<unordered_set>)
+ #if !defined(HAVE_STD_UNORDERED_SET) && __has_include(<unordered_set>)
#define HAVE_STD_UNORDERED_SET
#endif
-#endif
-#ifndef HAVE_TR1_UNORDERED_SET
- #if defined(__has_include) && __has_include(<tr1/unordered_set>)
+ #if !defined(HAVE_TR1_UNORDERED_SET) && __has_include(<tr1/unordered_set>)
#define HAVE_TR1_UNORDERED_SET
#endif
-#endif
+#endif // defined(__has_include)
/* provide replacement for C99 va_copy() if the compiler doesn't have it */
#endif /* va_copy/!va_copy */
#endif /* wxVaCopy */
-#ifndef HAVE_VARIADIC_MACROS
- #if wxCHECK_WATCOM_VERSION(1,2)
- #define HAVE_VARIADIC_MACROS
- #endif
-
- #if wxCHECK_VISUALC_VERSION(9)
- #define HAVE_VARIADIC_MACROS
- #endif
-#endif /* HAVE_VARIADIC_MACROS */
-
-
#ifndef HAVE_WOSTREAM
/*
Mingw <= 3.4 and all versions of Cygwin don't have std::wostream
#define WX_ATTRIBUTE_UNUSED
#endif
-/* Macro to issue warning when using deprecated functions with gcc3 or MSVC7: */
-#if wxCHECK_GCC_VERSION(3, 1)
- #define wxDEPRECATED(x) __attribute__((deprecated)) x
+/*
+ Macros for marking functions as being deprecated.
+
+ The preferred macro in the new code is wxDEPRECATED_MSG() which allows to
+ explain why is the function deprecated. Almost all the existing code uses
+ the older wxDEPRECATED() or its variants currently, but this will hopefully
+ change in the future.
+ */
+
+/* The basic compiler-specific construct to generate a deprecation warning. */
+#ifdef __clang__
+ #define wxDEPRECATED_DECL __attribute__((deprecated))
+#elif wxCHECK_GCC_VERSION(3, 1)
+ #define wxDEPRECATED_DECL __attribute__((deprecated))
#elif defined(__VISUALC__) && (__VISUALC__ >= 1300)
- #define wxDEPRECATED(x) __declspec(deprecated) x
+ #define wxDEPRECATED_DECL __declspec(deprecated)
+#else
+ #define wxDEPRECATED_DECL
+#endif
+
+/*
+ Macro taking the deprecation message. It applies to the next declaration.
+
+ If the compiler doesn't support showing the message, this degrades to a
+ simple wxDEPRECATED(), i.e. at least gives a warning, if possible.
+ */
+#if defined(__clang__) && defined(__has_extension)
+ #if __has_extension(attribute_deprecated_with_message)
+ #define wxDEPRECATED_MSG(msg) __attribute__((deprecated(msg)))
+ #else
+ #define wxDEPRECATED_MSG(msg) __attribute__((deprecated))
+ #endif
+#elif wxCHECK_GCC_VERSION(4, 5)
+ #define wxDEPRECATED_MSG(msg) __attribute__((deprecated(msg)))
+#elif wxCHECK_VISUALC_VERSION(8)
+ #define wxDEPRECATED_MSG(msg) __declspec(deprecated("deprecated: " msg))
#else
- #define wxDEPRECATED(x) x
+ #define wxDEPRECATED_MSG(msg) wxDEPRECATED_DECL
#endif
+/*
+ Macro taking the declaration that it deprecates. Prefer to use
+ wxDEPRECATED_MSG() instead as it's simpler (wrapping the entire declaration
+ makes the code unclear) and allows to specify the explanation.
+ */
+#define wxDEPRECATED(x) wxDEPRECATED_DECL x
+
#if defined(__GNUC__) && !wxCHECK_GCC_VERSION(3, 4)
/*
We need to add dummy "inline" to allow gcc < 3.4 to handle the
architectures to be able to pass wxLongLong_t to the standard functions
prototyped as taking "long long" such as strtoll().
*/
-#if (defined(__VISUALC__) && defined(__WIN32__))
+#if (defined(__VISUALC__) || defined(__INTELC__)) && defined(__WIN32__)
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec "I64"