On Mon, May 20, 2013 at 3:00 PM, Howard Hinnant <span dir="ltr"><<a href="mailto:hhinnant@apple.com" target="_blank">hhinnant@apple.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On May 20, 2013, at 5:49 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:<br>
<br>
> One thing to be cautious about:<br>
><br>
> struct T { char c[3]; };<br>
> static_assert(sizeof(std::atomic<T>) == 3 && alignof(std::atomic<T>) == 1, "under libstdc++");<br>
> static_assert(sizeof(std::atomic<T>) == 4 && alignof(std::atomic<T>) == 4, "under libc++");<br>
<br>
</div>Here's what I'm currently testing:<br>
<br>
template <class _Tp, bool = is_integral<_Tp>::value && !is_same<_Tp, bool>::value><br>
struct __atomic_base  // false<br>
{<br>
    _ALIGNAS_TYPE(_Atomic(_Tp)) _Tp __a_;<br>
<br>
where _ALIGNAS_TYPE(x) will become alignas(x).<br>
<br>
Does that look good to you?</blockquote><div><br></div><div>Yup, LGTM. </div></div>