Compiler.h: add macro GCC_OLDER_THAN()
This commit is contained in:
parent
92eeca3ba7
commit
0964b06240
@ -31,13 +31,21 @@
|
|||||||
#define GCC_CHECK_VERSION(major, minor) \
|
#define GCC_CHECK_VERSION(major, minor) \
|
||||||
(defined(__GNUC__) && GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
|
(defined(__GNUC__) && GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we building with gcc (not clang or any other compiler) and a
|
||||||
|
* version older than the specified one?
|
||||||
|
*/
|
||||||
|
#define GCC_OLDER_THAN(major, minor) \
|
||||||
|
(defined(__GNUC__) && !defined(__clang__) && \
|
||||||
|
GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0))
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
# define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
|
# define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
|
||||||
# if __clang_major__ < 3
|
# if __clang_major__ < 3
|
||||||
# error Sorry, your clang version is too old. You need at least version 3.1.
|
# error Sorry, your clang version is too old. You need at least version 3.1.
|
||||||
# endif
|
# endif
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
# if !GCC_CHECK_VERSION(4,6)
|
# if GCC_OLDER_THAN(4,6)
|
||||||
# error Sorry, your gcc version is too old. You need at least version 4.6.
|
# error Sorry, your gcc version is too old. You need at least version 4.6.
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
@ -138,7 +146,7 @@
|
|||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|
||||||
/* support for C++11 "override" was added in gcc 4.7 */
|
/* support for C++11 "override" was added in gcc 4.7 */
|
||||||
#if !defined(__clang__) && !GCC_CHECK_VERSION(4,7)
|
#if GCC_OLDER_THAN(4,7)
|
||||||
#define override
|
#define override
|
||||||
#define final
|
#define final
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include <new>
|
#include <new>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
|
#if GCC_OLDER_THAN(4,8)
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -54,7 +54,7 @@
|
|||||||
*/
|
*/
|
||||||
template<class T>
|
template<class T>
|
||||||
class Manual {
|
class Manual {
|
||||||
#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
|
#if GCC_OLDER_THAN(4,8)
|
||||||
/* no alignas() on gcc < 4.8: apply worst-case fallback */
|
/* no alignas() on gcc < 4.8: apply worst-case fallback */
|
||||||
__attribute__((aligned(8)))
|
__attribute__((aligned(8)))
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user