<div dir="ltr">Sounds like it:<br><br>"<span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif">The Core Language keywords<span class="inbox-inbox-Apple-converted-space"> </span></span><code style="color:rgb(42,42,42)">alignas</code><span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif">/</span><code style="color:rgb(42,42,42)">alignof</code><span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif"><span class="inbox-inbox-Apple-converted-space"> </span>from the<span class="inbox-inbox-Apple-converted-space"> </span></span><a href="http://go.microsoft.com/fwlink/p/?LinkID=235105" style="text-decoration:none;color:rgb(0,112,159);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif">alignment proposal</a><span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif"><span class="inbox-inbox-Apple-converted-space"> </span>that was voted into the Working Paper are implemented in Visual Studio 2015. Visual C++ in Visual Studio 2010 had<span class="inbox-inbox-Apple-converted-space"> </span></span><code style="color:rgb(42,42,42)">aligned_storage</code><span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif"><span class="inbox-inbox-Apple-converted-space"> </span>from TR1. Visual C++ in Visual Studio 2012 added<span class="inbox-inbox-Apple-converted-space"> </span></span><code style="color:rgb(42,42,42)">aligned_union</code><span style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif"><span class="inbox-inbox-Apple-converted-space"> </span>and<span class="inbox-inbox-Apple-converted-space"> </span></span><code style="color:rgb(42,42,42)">std::align()</code><span class="inbox-inbox-Apple-converted-space" style="color:rgb(42,42,42);font-family:"segoe ui","lucida grande",verdana,arial,helvetica,sans-serif"> </span><font color="#2a2a2a" face="segoe ui, lucida grande, verdana, arial, helvetica, sans-serif">to the Standard Library and significant issues were fixed in Visual C++ in Visual Studio 2013."</font><br><br><font color="#2a2a2a" face="segoe ui, lucida grande, verdana, arial, helvetica, sans-serif"><a href="https://msdn.microsoft.com/en-us/library/hh567368.aspx">https://msdn.microsoft.com/en-us/library/hh567368.aspx</a></font><br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 1, 2016 at 12:55 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg">Do we have MSVC support?</div><div style="word-wrap:break-word" class="gmail_msg"><br class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Dec 1, 2016, at 12:52 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com" class="gmail_msg" target="_blank">dblaikie@gmail.com</a>> wrote:</div><br class="m_6859747746785702737Apple-interchange-newline gmail_msg"><div class="gmail_msg"><div dir="ltr" class="gmail_msg">Any chance we can just replace this all with <a href="http://en.cppreference.com/w/cpp/types/aligned_union" class="gmail_msg" target="_blank">http://en.cppreference.com/w/cpp/types/aligned_union</a> ?<br class="gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Thu, Dec 1, 2016 at 11:56 AM Mehdi AMINI via Phabricator <<a href="mailto:reviews@reviews.llvm.org" class="gmail_msg" target="_blank">reviews@reviews.llvm.org</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mehdi_amini created this revision.<br class="gmail_msg">
mehdi_amini added reviewers: zturner, dblaikie.<br class="gmail_msg">
mehdi_amini added a subscriber: llvm-commits.<br class="gmail_msg">
<br class="gmail_msg">
This is NFC but for lifting the limitation to 10 types.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D27314" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D27314</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  llvm/include/llvm/Support/AlignOf.h<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: llvm/include/llvm/Support/AlignOf.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- llvm/include/llvm/Support/AlignOf.h<br class="gmail_msg">
+++ llvm/include/llvm/Support/AlignOf.h<br class="gmail_msg">
@@ -30,44 +30,36 @@<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
 namespace detail {<br class="gmail_msg">
-template <typename T1,<br class="gmail_msg">
-          typename T2 = char, typename T3 = char, typename T4 = char,<br class="gmail_msg">
-          typename T5 = char, typename T6 = char, typename T7 = char,<br class="gmail_msg">
-          typename T8 = char, typename T9 = char, typename T10 = char><br class="gmail_msg">
-class AlignerImpl {<br class="gmail_msg">
-  T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; T8 t8; T9 t9; T10 t10;<br class="gmail_msg">
<br class="gmail_msg">
-  AlignerImpl() = delete;<br class="gmail_msg">
-};<br class="gmail_msg">
+/// Compute the maximum alignment over the types in the variadic pack.<br class="gmail_msg">
+template <typename T0> constexpr size_t max_alignof() { return alignof(T0); }<br class="gmail_msg">
+template <typename T0, typename T1, typename... Ts><br class="gmail_msg">
+constexpr size_t max_alignof() {<br class="gmail_msg">
+  return (max_alignof<T0>() > max_alignof<T1, Ts...>())<br class="gmail_msg">
+             ? max_alignof<T0>()<br class="gmail_msg">
+             : max_alignof<T1, Ts...>();<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+/// Compute the maximum size over the types in the variadic pack.<br class="gmail_msg">
+template <typename T0> constexpr size_t max_sizeof() { return sizeof(T0); }<br class="gmail_msg">
+template <typename T0, typename T1, typename... Ts><br class="gmail_msg">
+constexpr size_t max_sizeof() {<br class="gmail_msg">
+  return (max_sizeof<T0>() > max_sizeof<T1, Ts...>()) ? max_sizeof<T0>()<br class="gmail_msg">
+                                                      : max_sizeof<T1, Ts...>();<br class="gmail_msg">
+}<br class="gmail_msg">
<br class="gmail_msg">
-template <typename T1,<br class="gmail_msg">
-          typename T2 = char, typename T3 = char, typename T4 = char,<br class="gmail_msg">
-          typename T5 = char, typename T6 = char, typename T7 = char,<br class="gmail_msg">
-          typename T8 = char, typename T9 = char, typename T10 = char><br class="gmail_msg">
-union SizerImpl {<br class="gmail_msg">
-  char arr1[sizeof(T1)], arr2[sizeof(T2)], arr3[sizeof(T3)], arr4[sizeof(T4)],<br class="gmail_msg">
-       arr5[sizeof(T5)], arr6[sizeof(T6)], arr7[sizeof(T7)], arr8[sizeof(T8)],<br class="gmail_msg">
-       arr9[sizeof(T9)], arr10[sizeof(T10)];<br class="gmail_msg">
-};<br class="gmail_msg">
 } // end namespace detail<br class="gmail_msg">
<br class="gmail_msg">
 /// \brief This union template exposes a suitably aligned and sized character<br class="gmail_msg">
-/// array member which can hold elements of any of up to ten types.<br class="gmail_msg">
+/// array member which can hold any of the requested types.<br class="gmail_msg">
 ///<br class="gmail_msg">
 /// These types may be arrays, structs, or any other types. The goal is to<br class="gmail_msg">
 /// expose a char array buffer member which can be used as suitable storage for<br class="gmail_msg">
-/// a placement new of any of these types. Support for more than ten types can<br class="gmail_msg">
-/// be added at the cost of more boilerplate.<br class="gmail_msg">
-template <typename T1,<br class="gmail_msg">
-          typename T2 = char, typename T3 = char, typename T4 = char,<br class="gmail_msg">
-          typename T5 = char, typename T6 = char, typename T7 = char,<br class="gmail_msg">
-          typename T8 = char, typename T9 = char, typename T10 = char><br class="gmail_msg">
-struct AlignedCharArrayUnion : llvm::AlignedCharArray<<br class="gmail_msg">
-    alignof(llvm::detail::AlignerImpl<T1, T2, T3, T4, T5,<br class="gmail_msg">
-                                      T6, T7, T8, T9, T10>),<br class="gmail_msg">
-    sizeof(::llvm::detail::SizerImpl<T1, T2, T3, T4, T5,<br class="gmail_msg">
-                                     T6, T7, T8, T9, T10>)> {<br class="gmail_msg">
-};<br class="gmail_msg">
+/// a placement new of any of these types.<br class="gmail_msg">
+template <typename... Ts><br class="gmail_msg">
+struct AlignedCharArrayUnion<br class="gmail_msg">
+    : llvm::AlignedCharArray<detail::max_alignof<Ts...>(),<br class="gmail_msg">
+                             detail::max_sizeof<Ts...>()> {};<br class="gmail_msg">
 } // end namespace llvm<br class="gmail_msg">
<br class="gmail_msg">
 #endif // LLVM_SUPPORT_ALIGNOF_H<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>
</div></blockquote></div><br class="gmail_msg"></div></blockquote></div>