Our project has a static assert. Its creating a noisy output at -Wall and above. We attempted to manage it with a GCC diagnostic block, but its not quite meeting expectations. The static assert creates a bunch of unused variable warnings. We have a UNUSED macro that casts to a void (its the only portable way I know to clear an unused warning), but we don't have a variable name to use with it. How can we clear a warning like `unused variable 'assert_26' [-Wunused-variable]|`? ********** Here's the static assert: template <bool b> struct CompileAssert { static char dummy[2*b-1]; }; #define COMPILE_ASSERT(assertion) COMPILE_ASSERT_INSTANCE(assertion, __LINE__) #define COMPILE_ASSERT_INSTANCE(assertion, instance) static CompileAssert<(assertion)> ASSERT_JOIN(assert_, instance) #define ASSERT_JOIN(X, Y) DO_ASSERT_JOIN(X, Y) #define DO_ASSERT_JOIN(X, Y) X##Y ********** Here's how we try to manage it in one of out header files: #ifndef FOO_BAR #define FOO_BAR #define GCC_OPTIMIZE_AWARE ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) || defined(__clang__)) #if GCC_DIAGNOSTIC_AWARE # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-value" # pragma GCC diagnostic ignored "-Wunused-variable" #endif .... COMPILE_ASSERT(foo == bar); #if GCC_DIAGNOSTIC_AWARE # pragma GCC diagnostic pop #endif #endif // FOO_BAR ********** Users include the header file, so we have no control over which options they place on the command line. Here's an example of the warning it generates with -Wall and GCC 4.8 (even when guarded like above): unused variable 'assert_26' [-Wunused-variable]|