29#ifndef _ALIGNED_BUFFER_H
30#define _ALIGNED_BUFFER_H 1
32#pragma GCC system_header
34#if __cplusplus >= 201103L
46 template<
typename _Tp>
47 struct __aligned_membuf
54 struct _Tp2 { _Tp _M_t; };
56 alignas(__alignof__(_Tp2::_M_t))
unsigned char _M_storage[
sizeof(_Tp)];
58 __aligned_membuf() =
default;
61 __aligned_membuf(std::nullptr_t) { }
65 {
return static_cast<void*
>(&_M_storage); }
68 _M_addr() const noexcept
69 {
return static_cast<const void*
>(&_M_storage); }
73 {
return static_cast<_Tp*
>(_M_addr()); }
76 _M_ptr() const noexcept
77 {
return static_cast<const _Tp*
>(_M_addr()); }
80#if _GLIBCXX_INLINE_VERSION
81 template<
typename _Tp>
82 using __aligned_buffer = __aligned_membuf<_Tp>;
84#pragma GCC diagnostic push
85#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
91 template<
typename _Tp>
92 struct __aligned_buffer
98 __aligned_buffer() =
default;
101 __aligned_buffer(std::nullptr_t) { }
106 return static_cast<void*
>(&_M_storage);
110 _M_addr() const noexcept
112 return static_cast<const void*
>(&_M_storage);
117 {
return static_cast<_Tp*
>(_M_addr()); }
120 _M_ptr() const noexcept
121 {
return static_cast<const _Tp*
>(_M_addr()); }
123#pragma GCC diagnostic pop
GNU extensions for public use.