http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53469
Bug #: 53469 Summary: #pragma GCC diagnostic works, but using _Pragma doesn't for -Wunused-local-typedefs Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: bur...@gcc.gnu.org CC: do...@gcc.gnu.org Since GCC 4.7, the new warning -Wunused-local-typedefs is supported (PR c++/33255, 2011-09-08); since GCC 4.8 (2012-05-04) it is enabled by -Wall and -Wunused. A typedef was used in a compile-time check whether an expression is constant (compile-time assert). To allow for the new check but selectively disable the warning for that line, I tried a pragma. While using #pragma directly works, using _Pragma fails. The following example shows no warning for "foo" but for "bar" it fails with: test.cc:19:14: error: typedef ‘myint’ locally defined but not used [-Werror=unused-local-typedefs] Expected: _Pragma has the same result as writing #pragma. #pragma GCC diagnostic error "-Wunused-local-typedefs" // Works: void foo () { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-local-typedefs" typedef int myint; #pragma GCC diagnostic pop } // Fails: #define STRINGIFY(x) #x #define TEST(x) \ _Pragma(STRINGIFY(GCC diagnostic ignored "-Wunused-local-typedefs")) \ typedef int myint; // _Pragma(STRINGIFY(GCC diagnostic pop)) void bar () { TEST(myint) }