//============================================================================== // Dropped attributes on class member //============================================================================== // $ g++ -ansi -pedantic -Wall -c <file> // Output: // ... 'ASSERTION_FAILED_IN_LINE_42' ... // Known to fail with: // 3.4.3 (linux) // 3.4.2 (linux) // 3.4.2 (mingw) // 3.3.4 (linux) // 3.2.3 (mingw) // Known to work with: // 4.0.0-beta (linux) //==============================================================================
//------------------------------------------------------------------------------ // Simple compile time assertion facility to check the identity of two types // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template<typename X, typename Y> struct same { enum { n = -1 }; }; template<typename X> struct same<X,X> { enum { n = 1 }; }; #define ASSERT_SAME_TYPE(x,y) ASSERT_SAME_TYPE_IMPL_I(__LINE__,x,y) #define ASSERT_SAME_TYPE_IMPL_I(i,x,y) ASSERT_SAME_TYPE_IMPL_II(i,x,y) #define ASSERT_SAME_TYPE_IMPL_II(i,x,y) \ bool ASSERTION_FAILED_IN_LINE_ ## i [ ::same<x,y>::n ] //------------------------------------------------------------------------------ // The problem // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #define CC __attribute__((__stdcall__)) typedef void CC type(); ASSERT_SAME_TYPE(type,void CC ()); // ok struct X { typedef void CC type(); }; ASSERT_SAME_TYPE(X::type,void CC ()); // <- here //------------------------------------------------------------------------------ -- Summary: Dropped attributes on class members Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tschwinger at neoscientists dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20439