23 #if defined( _MSC_VER )
24 #define PORTING_MSVC_DISABLE_WARNINGS( a ) __pragma( warning( disable : a ) )
26 #define PORTING_MSVC_PUSH_WARNINGS( ) __pragma( warning( push ) )
28 #define PORTING_MSVC_POP_WARNINGS( ) __pragma( warning( pop ) )
31 #define PORTING_MSVC_DISABLE_WARNINGS( a )
32 #define PORTING_MSVC_PUSH_WARNINGS( )
33 #define PORTING_MSVC_POP_WARNINGS( )
37 #if defined( __GNUC__ )
38 #define PORTING_DO_PRAGMA_( x ) _Pragma( #x )
39 #define PORTING_DO_PRAGMA( x ) PORTING_DO_PRAGMA_( x )
43 #if defined( __clang__ )
44 #define PORTING_CLANG_DISABLE_WARNING( arg ) PORTING_DO_PRAGMA( clang diagnostic ignored arg )
46 #define PORTING_CLANG_PUSH_WARNINGS( ) PORTING_DO_PRAGMA( clang diagnostic push )
48 #define PORTING_CLANG_POP_WARNINGS( ) PORTING_DO_PRAGMA( clang diagnostic pop )
51 #define PORTING_CLANG_DISABLE_WARNING( a )
52 #define PORTING_CLANG_PUSH_WARNINGS( )
53 #define PORTING_CLANG_POP_WARNINGS( )
57 #if defined( __GNUC__ ) && !defined( __clang__ )
58 #define PORTING_GCC_DISABLE_WARNING( arg ) PORTING_DO_PRAGMA( GCC diagnostic ignored arg )
60 #define PORTING_GCC_PUSH_WARNINGS( ) PORTING_DO_PRAGMA( GCC diagnostic push )
62 #define PORTING_GCC_POP_WARNINGS( ) PORTING_DO_PRAGMA( GCC diagnostic pop )
65 #define PORTING_GCC_DISABLE_WARNING( a )
66 #define PORTING_GCC_PUSH_WARNINGS( )
67 #define PORTING_GCC_POP_WARNINGS( )
71 #if defined( __GNUC__ )
72 #define PORTING_CLANG_GCC_DISABLE_WARNING( arg ) PORTING_DO_PRAGMA( GCC diagnostic ignored arg )
74 #define PORTING_CLANG_GCC_DISABLE_WARNING( a )
78 #define PORTING_PUSH_WARNINGS( ) \
79 PORTING_CLANG_PUSH_WARNINGS( ) \
80 PORTING_GCC_PUSH_WARNINGS( ) \
81 PORTING_MSVC_PUSH_WARNINGS( )
83 #define PORTING_POP_WARNINGS( ) \
84 PORTING_CLANG_POP_WARNINGS( ) \
85 PORTING_GCC_POP_WARNINGS( ) \
86 PORTING_MSVC_POP_WARNINGS( )