// { dg-do compile { target c++11 } } // Check alignment of the buffer types used for uninitialized storage. #include template using membuf = __gnu_cxx::__aligned_membuf; template using objbuf = __gnu_cxx::__aligned_buffer; template constexpr bool check_alignof_membuf() { return alignof(membuf) == alignof(T) && __alignof__(membuf) == alignof(T); } template constexpr bool check_alignof_objbuf() { #if _GLIBCXX_INLINE_VERSION // For the gnu-versioned-namespace ABI __aligned_buffer == __aligned_membuf. return check_alignof_membuf(); #else return alignof(objbuf) == __alignof__(T) && __alignof__(objbuf) == __alignof__(T); #endif } struct S { long long l; }; struct alignas(128) X { char x; }; static_assert( check_alignof_membuf(), "membuf" ); static_assert( check_alignof_membuf(), "membuf" ); static_assert( check_alignof_membuf(), "membuf" ); static_assert( check_alignof_membuf(), "membuf" ); static_assert( check_alignof_membuf(), "membuf" ); static_assert( check_alignof_objbuf(), "objbuf" ); static_assert( check_alignof_objbuf(), "objbuf" ); static_assert( check_alignof_objbuf(), "objbuf" ); static_assert( check_alignof_objbuf(), "objbuf" ); static_assert( check_alignof_objbuf(), "objbuf" );